我应该为同一服务的不同分支编写不同的测试用例吗?

时间:2014-12-17 20:15:47

标签: 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 new UserNotFoundException();
    }
    return returnedUser;
  }

我有这个服务实现,测试用例是:

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

这个测试案例涵盖了所有分支机构吗?我应该编写另一个测试用例来检查用户对象的值(空检查),这是一个服务中的分支吗?

1 个答案:

答案 0 :(得分:0)

  

这个测试用例是否覆盖了所有分支?

不,不。

显然它什么都没有,因为它根本不会调用被测试的方法!

顺便说一句:我不知道您的存储库,但userRepository.save(user)可能总是返回给定的用户,因此if (returnedUser == null)可能不存在,并且删除它更有用if而不是为。

编写测试
  

我应该写另一个测试吗?   你应该开始让你的第一个测试成为有用的测试。该测试根本不是测试。因为它甚至没有调用被测试的方法!

首先用断言替换Logger并调用方法:

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

也许还会检查用户是否真的已保存。

您还可以进行其他测试,测试用户是否在未加载/或之前保存的日期库中创建。