从Junit和Mockito中的另一个Public Class中存根以求最终Class方法

时间:2018-07-05 11:24:17

标签: java mockito junit5

我需要存根其他其他公开类方法中的最终类 方法。 我的情况是,我有一个类名 ElasticIntegration ,它是Public类。有一种称为 licenseCheckOut

的方法
public Response licenseCheckOut(String jsonObj) {
    LogResource logData = new LogResource();
    try {
        LicenseServiceImpl licenseCheck = new LicenseServiceImpl();
        JSONObject queryObj = new JSONObject(jsonObj);
        int licenseId = -1;         
        Properties configProperties = Utilities.getConfigProperties();      
        Utilities.verifykeycloakToken(queryObj, configProperties);
        String userName = userAuth.getUserInfo(queryObj,configProperties);
        if(userName !=null){
            licenseId = licenseCheck.checkoutLicense(userName);
        }
        String result = "{\"licenseid\": "+ licenseId +"}";
        return Response.ok(result).build();
    } catch (Exception ex) {
        LogDetail details = Utilities.constructDetails("licenseCheckOut", ex);
        logData.writeLogMessage(null, details);
        return Response.serverError().entity(details).build();
    }
}

licenseCheckOut 方法中,有 verifykeycloakToken 是我们需要存根的方法。 实用程序 最终类。

 **verifykeycloakToken Function in Utilities class**

如果您完全按照“上方图片”参考进行检查, connection.connect(),我们将收到错误消息。所以我用 when()。thenReturn(

    Utilities util = new Utilities();
    Utilities mock = mock(Utilities.class);
    JSONObject queryObj = new JSONObject(jsonObj);
    Properties mapProperties = null ;
    when(mock.verifykeycloakToken(queryObj, mapProperties)).thenReturn(true);

我到达这里的错误是

  

org.mockito.exceptions.base.MockitoException:   无法模拟/间谍类com.project.Utilities   Mockito无法模拟/间谍,因为:    -期末班       在ElasticIntegrationTest.licenseCheckOut_verifykeycloakToken_ShouldReturnSuccessBuild(ElasticIntegrationTest.java:51)

1 个答案:

答案 0 :(得分:1)

您在verifykeycloakToken类中的Utilities方法是static方法。

要对此进行模拟,您可以探索以下选项:

  • 模拟verifykeycloakToken函数中的所有内容。那看起来 在创建new URL()时,在您的情况下很难做 对象mockito无法处理。
  • 使用powermockito是因为单独的模拟无法处理static的模拟。

PS: 通常不赞成使用powermock ,尤其是当您遵循 TDD 时。但是在使用旧版代码时,它真的很容易解决。