【问题标题】:Should I write different test case for different branch of same service?我应该为同一服务的不同分支编写不同的测试用例吗?
【发布时间】:2014-12-17 20:15:47
【问题描述】:
  @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);
  }

这个测试用例是否覆盖了所有分支?我是否应该编写另一个测试用例来检查作为服务分支的用户对象的值(空检查)?

【问题讨论】:

  • 你唯一的断言是aboutMe is not null.

标签: java spring testcase test-coverage


【解决方案1】:

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

不,它没有。

很明显,它什么都不包含,因为它根本不调用被测方法!

顺便说一句:我不知道你的存储库,但很可能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());
}

也许还要检查用户是否真的被保存了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 2018-03-15
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多