java–测试小结

导读:本篇文章讲解 java–测试小结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

java–测试小结


环境

idea2018,jdk1.8

后台开发中用到的一些测试方法和工具。

demo下载:https://github.com/2010yhh/springBoot-demos/tree/master/springboot-druid

1.unit单元测试(junit+mockito)

assert来判断测试的结果
verfiy来判断执行的次数和顺序
doAnswer用来判断执行的方法和方法的参数
Mock声明的对象,对函数的调用均执行mock(即虚假函数),不执行真正部分。见:https://blog.csdn.net/qq_30141957/article/details/81273829
Spy声明的对象,对函数的调用均执行真正部分。

增删查改service测试代码示例:

public class UserServiceImplTest {
    @Mock
    UserService userService;
    /**
     * 在需要Mock的属性上标记@Mock注解,然后@RunWith(MockitoJUnitRunner.class)
     * 或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。
     */
    @Before
    public void setUp() throws Exception {
        // 初始化测试用例类中由Mockito的注解标注的所有模拟对象
        //或者:UserService userService=  Mockito.mock(UserService.class);
        // UserService userService2=  Mockito.spy(UserService.class);
        MockitoAnnotations.initMocks(this);
    }
    @Test
    public void findByUserName() {
        User user=new User();
        user.setId(10);
        user.setUserName("user10");
        user.setPassWord("123456");
        //测试输入和期望的输出:当使用 user10 查询数据库的时候,返回user
        when(userService.findByUserName("user10")).thenReturn(user);
        //测试调用
        User user1=userService.findByUserName("user10");
        assertNotNull(user1);
        assertEquals(10, user1.getId().intValue());
        //验证是否执行过1次
        verify(userService, times(1)).findByUserName(eq("user10"));

    }

    @Test
    public void findAll() {

        List<User> users=new ArrayList<>();
        when(userService.findAll()).thenReturn(users);
    }

    @Test
    public void addUser() {
        User user=new User();
        user.setId(10);
        user.setUserName("user10");
        user.setPassWord("123456");
        //测试
        userService.addUser(user);
        //抓取器
        ArgumentCaptor<User> userCaptor = ArgumentCaptor.forClass(User.class);
        //验证是否执行过1次
        verify(userService, times(1)).addUser(userCaptor.capture());
        // 获取抓取到的参数值
        User user1 = userCaptor.getValue();
        assertNotNull(user1);
        assertEquals("user10", user1.getUserName());
    }

    @Test
    public void updateUser() {
        User user=new User();
        user.setId(10);
        user.setUserName("user10_update2");
        user.setPassWord("123456");
        //测试
        userService.updateUser(user);
        //抓取器
        ArgumentCaptor<User> userCaptor = ArgumentCaptor.forClass(User.class);
        //验证是否执行过1次
        verify(userService, times(1)).updateUser(userCaptor.capture());
        // 获取抓取到的参数值
        User user1 = userCaptor.getValue();
        assertNotNull(user1);
        assertEquals("user10_update2", user1.getUserName());

    }
    @Test
    public void deleteUser() {
        //测试
        userService.deleteUser(10);
        //验证是否执行过1次
        verify(userService, times(1)).deleteUser(10);
        //测试调用
        User user=userService.findByUserName("user10");
        assertNull(user);
        //方法没有返回值时可以用上面的验证是否执行过;或者下面的
        doAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                Object[] args = invocationOnMock.getArguments();
                return "called with arguments: " + args;
            }
        }).when(userService).findAll();
    }
}

spy和mock的使用区别:

 @Test
    public void findByUserNameSpy() {
        //spy下执行实际方法
        UserServiceImpl userService2=  Mockito.spy(UserServiceImpl.class);
        userService2.findByUserName("user10");
      }
    @Test
    public void findByUserNameMock() {
        UserServiceImpl userService=  Mockito.mock(UserServiceImpl.class);
        //mock 下thenCallRealMethod执行实际方法
        when(userService.findByUserName(anyString())).thenCallRealMethod();
        userService.findByUserName("user10");
        //正常情况mock不执行实际方法,无输出
        User user=new User();
        user.setId(10);
        user.setUserName("user10");
        user.setPassWord("123456");
        //测试输入和期望的输出:当使用 user10 查询数据库的时候,返回user
        when(userService.findByUserName("user10")).thenReturn(user);
        //测试调用
        User user1=userService.findByUserName("user10");
    }

2.接口测试:spring中mockmvc测试接口

mockmvc增删查改接口示例:

//Spring 环境的上下文的支持
@RunWith(SpringRunner.class)
//获取启动类,加载配置,寻找主配置启动类(被@SpringBootApplication 注解的)
@SpringBootTest
public class UserControllerTest {
    @Autowired
    private WebApplicationContext wac;
    private MockMvc mvc;
    //private MockHttpSession session;
    @Before
    public void setupMockMvc() throws Exception {
        mvc = MockMvcBuilders.webAppContextSetup(wac).build(); //初始化MockMvc对象
        //测试需要登录的接口
        //session = new MockHttpSession();
        //User user =new User("root","root");
       // session.setAttribute("user",user);
    }
    @Test
    public void addUser()throws Exception {
        String user="{\"id\":5,\"userName\":\"yhh_addUser\",\"passWord\":\"111111\"}";
        mvc.perform(MockMvcRequestBuilders.post("/user")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .content(user.getBytes()))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print());
    }

    @Test
    public void deleteUser() throws Exception{
        mvc.perform(MockMvcRequestBuilders.delete("/user?id=1")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .accept(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print());
    }
    @Test
    public void getUser()throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/user?userName=yhh_addUser_updateUser")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .accept(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print());
    }
    @Test
    public void updateUser() throws Exception{
        String user="{\"id\":5,\"userName\":\"yhh_addUser_updateUser\",\"passWord\":\"22222\"}";
        mvc.perform(MockMvcRequestBuilders.put("/user")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .content(user.getBytes()))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print());
    }
}

在这里插入图片描述

在这里插入图片描述

3.代码覆盖率

1)

在这里插入图片描述
2)

在这里插入图片描述

3)查看代码覆盖率报告

在这里插入图片描述

4.接口测试

常用工具:

psotman 、Fiddler 、idea自带的Http client

RESTClient、jmeter、loadrunner、SoapUI等

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/18381.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!