欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java 单元测试实践--编写方法:单元测试案例编写过程中的 Java 编程技巧 (2)

最编程 2024-04-20 16:44:52
...
/** * 用户服务测试类 */ @RunWith(MockitoJUnitRunner.class) public class UserServiceTest { /** 定义静态常量 */ /** 资源路径 */ private static final String RESOURCE_PATH = "testUserService/"; /** 模拟依赖对象 */ /** 用户DAO */ @Mock private UserDAO userDAO; /** 标识生成器 */ @Mock private IdGenerator idGenerator; /** 定义测试对象 */ /** 用户服务 */ @InjectMocks private UserService userService; /** * 在测试之前 */ @Before public void beforeTest() { Whitebox.setInternalState(userService, "canModify", Boolean.TRUE); } /** * 测试: 保存用户-创建 */ @Test public void testSaveUserWithCreate() { // 模拟依赖方法 // 模拟依赖方法: userDAO.getIdByName Mockito.doReturn(null).when(userDAO).getIdByName(Mockito.anyString()); // 模拟依赖方法: idGenerator.next Long userId = 123L; Mockito.doReturn(userId).when(idGenerator).next(); // 调用测试方法 String path = RESOURCE_PATH + "testSaveUserWithCreate/"; String text = ResourceHelper.getResourceAsString(getClass(), path + "userSave.json"); UserSaveVO userSave = JSON.parseObject(text, UserSaveVO.class); Assert.assertEquals("用户标识不一致", userId, userService.saveUser(userSave)); // 验证依赖方法 // 验证依赖方法: userDAO.getIdByName Mockito.verify(userDAO).getIdByName(userSave.getName()); // 验证依赖方法: idGenerator.next Mockito.verify(idGenerator).next(); // 验证依赖方法: userDAO.create ArgumentCaptor<UserDO> userCreateCaptor = ArgumentCaptor.forClass(UserDO.class); Mockito.verify(userDAO).create(userCreateCaptor.capture()); text = ResourceHelper.getResourceAsString(getClass(), path + "userCreate.json"); Assert.assertEquals("用户创建不一致", text, JSON.toJSONString(userCreateCaptor.getValue())); // 验证依赖对象 Mockito.verifyNoMoreInteractions(userDAO, idGenerator); } /** * 测试: 保存用户-修改 */ @Test public void testSaveUserWithModify() { // 模拟依赖方法 // 模拟依赖方法: userDAO.getIdByName Long userId = 123L; Mockito.doReturn(userId).when(userDAO).getIdByName(Mockito.anyString()); // 调用测试方法 String path = RESOURCE_PATH + "testSaveUserWithModify/"; String text = ResourceHelper.getResourceAsString(getClass(), path + "userSave.json"); UserSaveVO userSave = JSON.parseObject(text, UserSaveVO.class); Assert.assertEquals("用户标识不一致", userId, userService.saveUser(userSave)); // 验证依赖方法 // 验证依赖方法: userDAO.getIdByName Mockito.verify(userDAO).getIdByName(userSave.getName()); // 验证依赖方法: userDAO.modify ArgumentCaptor<UserDO> userModifyCaptor = ArgumentCaptor.forClass(UserDO.class); Mockito.verify(userDAO).modify(userModifyCaptor.capture()); text = ResourceHelper.getResourceAsString(getClass(), path + "userModify.json"); Assert.assertEquals("用户修改不一致", text, JSON.toJSONString(userModifyCaptor.getValue())); // 验证依赖对象 Mockito.verifyNoMoreInteractions(userDAO, idGenerator); } /** * 测试: 保存用户-异常 */ @Test public void testSaveUserWithException() { // 注入依赖对象 Whitebox.setInternalState(userService, "canModify", Boolean.FALSE); // 模拟依赖方法 // 模拟依赖方法: userDAO.getIdByName Mockito.doReturn(123L).when(userDAO).getIdByName(Mockito.anyString()); // 调用测试方法 String path = RESOURCE_PATH + "testSaveUserWithException/"; String text = ResourceHelper.getResourceAsString(getClass(), path + "userSave.json"); UserSaveVO userSave = JSON.parseObject(text, UserSaveVO.class); UnsupportedOperationException exception = Assert.assertThrows("异常类型不一致", UnsupportedOperationException.class, () -> userService.saveUser(userSave)); Assert.assertEquals("异常消息不一致", "不支持修改", exception.getMessage()); // 验证依赖方法 // 验证依赖方法: userDAO.getIdByName Mockito.verify(userDAO).getIdByName(userSave.getName()); // 验证依赖对象 Mockito.verifyNoMoreInteractions(userDAO, idGenerator); } } 其中,加载的JSON资源文件内容如下: userSave.json: userCreate.json: userModify.json: