java - 从 Junit 和 Mockito 中的另一个公共类中为最终类方法存根
问题描述
我需要在其他公共类方法中存根Final Class 方法。我的场景,我有一个类名ElasticIntegration,它是公共类。有一个方法叫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)
解决方案
你verifykeycloakToken
在Utilities
课堂上的方法是一种static
方法。
要模拟这一点,您可以探索以下选项:
- 模拟
verifykeycloakToken
函数内部的所有内容。在您的情况下,这似乎很难做到,因为您正在其中创建无法处理的new URL()
对象。mockito
- 使用powermockito因为 mocktio 单独无法处理模拟
static
。
PS:使用powermock
通常不受欢迎,特别是如果您遵循TDD。但在处理遗留代码时,它确实会派上用场。
推荐阅读
- sql-server - 通过输入不完整的 ID 号从 StudentTable 中获取正确的学生 ID
- r - 如何一次查询具有多个关键字的 Mongo 数据库?
- python - 我可以使用 tensorflow-hangul-recognition 制作 Unity 插件吗
- python - 在 PySpark 的列名中使用带有特殊字符的镶木地板文件
- html - 滚动时我的导航栏上出现白色间隙
- sql - MS Access 中的某些隐藏字符是否有问题?
- c++ - C++ Vigenere 和 Caesar 密码在同一编程中使用 switch case
- cassandra - 将 Cassandra OSS 4.0 RC1 节点添加到具有 DSE 6.0.14 节点的集群中
- wordpress - 防止在子路由中将 cookie 发送到 wordpress
- c# - 拉取访问被拒绝,存储库不存在或可能需要授权:服务器消息:不足的范围:授权失败