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());
}