【问题标题】:junit- sonarQube test coverage : if conditionjunit-sonarQube 测试覆盖率:if 条件
【发布时间】:2021-10-23 14:52:26
【问题描述】:

你能帮我如何在这种方法中通过 junit 测试覆盖 if 语句:

这是我在控制器“用户”中的方法:

@GetMapping(value = "/informationUser") 
public ResponseEntity<Utilisateur> getAllInformationAboutUser() {
    Utilisateur user = null; // Fully covered By tests
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // Fully covered By tests
    if (authentication != null) { // Partially covered by Tests
        user = userService.findUserByLogin(authentication.getName()); // Not covered by Tests
    }
    return new ResponseEntity<>(user, HttpStatus.OK); Fully covered By tests
}

我的问题是 if 语句的 2 行,我不知道我想如何覆盖它们。

这是我对这个方法的测试代码:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
ResponseEntity<Utilisateur> responseEntity16 = userController.getAllInformationAboutUser();
    
SecurityContextHolder.clearContext();
ResponseEntity<Utilisateur> responseEntity15 = userController.getAllInformationAboutUser();

提前感谢您的帮助

【问题讨论】:

  • 模拟身份验证,并使其返回一个对象。
  • 在运行此测试(第二次)之前,只需 SecurityContextHolder.getContext().setAuthentication(null)SecurityContextHolder.clearContext()
  • @Valijion :我试图这样做,但 if 语句中的行仍然没有覆盖
  • @Maroun : 还是一样,还没有被覆盖
  • @Valijon 我需要使身份验证与 null 不同,才能完全覆盖该方法

标签: java junit sonarqube


【解决方案1】:

你需要创建一个临时的Authentication信息

@Test
public void getAllInformationAboutUserTest() {
    
    // If you use Mockito -> Mockito.mock(Authentication.class)
    SecurityContextHolder.getContext().setAuthentication(new TestingAuthenticationToken("foo", "bar"));
    ResponseEntity<Utilisateur> responseEntity16 = userController.getAllInformationAboutUser();
        
    SecurityContextHolder.clearContext();
    ResponseEntity<Utilisateur> responseEntity15 = userController.getAllInformationAboutUser();
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-09
    • 2022-07-01
    • 2016-02-29
    • 2018-10-18
    • 2015-03-13
    • 1970-01-01
    • 2014-05-04
    • 2021-03-03
    相关资源
    最近更新 更多