我需要存根其他其他公开类方法中的最终类 方法。 我的情况是,我有一个类名 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 是我们需要存根的方法。 实用程序 类是最终类。
如果您完全按照“上方图片”参考进行检查, 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)
答案 0 :(得分:1)
您在verifykeycloakToken
类中的Utilities
方法是static
方法。
要对此进行模拟,您可以探索以下选项:
verifykeycloakToken
函数中的所有内容。那看起来
在创建new URL()
时,在您的情况下很难做
对象mockito
无法处理。static
的模拟。 PS: 通常不赞成使用powermock
,尤其是当您遵循 TDD 时。但是在使用旧版代码时,它真的很容易解决。