Java 我应该为同一服务的不同分支编写不同的测试用例吗?
我有这个服务实现,测试用例是:Java 我应该为同一服务的不同分支编写不同的测试用例吗?,java,spring,testcase,test-coverage,Java,Spring,Testcase,Test Coverage,我有这个服务实现,测试用例是: @Override public User editDescription(User user, String description) throws UserNotFoundException { user.setAboutMe(description); User returnedUser = userRepository.save(user); if (returnedUser == null) { throw n
@Override
public User editDescription(User user, String description) throws UserNotFoundException {
user.setAboutMe(description);
User returnedUser = userRepository.save(user);
if (returnedUser == null) {
throw new UserNotFoundException();
}
return returnedUser;
}
这个测试用例是否覆盖了所有的分支?我是否应该编写另一个测试用例来检查作为服务中的分支的用户objectnull checking的值
这个测试用例是否覆盖了所有的分支
不,没有
很明显,它没有涵盖任何内容,因为它根本没有调用被测试的方法
顺便说一句:我不知道您的存储库,但userRepository.saveuser可能总是返回给定的用户,因此if returnedUser==null可能是无意义的,删除if而不是为其编写测试更有用
我应该再写一个测试吗
你应该开始让你的第一个测试成为有用的测试。这个测试根本不是一个测试。因为它甚至不调用被测试的方法
首先用断言替换记录器并调用该方法:
@Test
public void shouldEditDescriptionOfTheUser() throws UserNotFoundException{
databuilderService.createAll();
User user = userService.findByEmail("abc@gmail.com");
user.setAboutMe("It's a description about the user");
userService.save(user);
String aboutMe = user.getAboutMe();
LOGGER.info(aboutMe);
Assert.assertNotNull(aboutMe);
}
也可以检查用户是否真的保存了
您还可以进行另一个测试,该测试是在数据库中创建的,之前未加载/保存该用户。您唯一的断言是aboutMe is not null。
@Test
public void shouldEditDescriptionOfTheUser() throws UserNotFoundException{
databuilderService.createAll(); //I would create just a single user instead
User user = userService.findByEmail("abc@gmail.com");
String newDesciption = "It's a description about the user";
Assert.notEquals("precondition", newDesciption , user.getAboutMe);
xxx.editDescription(user, newDesciption);
Assert.assertEquals(newDesciption, user.getAboutMe());
}