如何使用 power mock 模拟将 List 类型作为参数的私有方法? [复制]
Posted
技术标签:
【中文标题】如何使用 power mock 模拟将 List 类型作为参数的私有方法? [复制]【英文标题】:How to mock a private method which is taking List type as a parameter using power mock? [duplicate] 【发布时间】:2018-03-06 09:08:22 【问题描述】:大家好,我正在尝试模拟一个将 List 类型作为参数的私有方法 部分代码详细信息如下:
客户验证类
public class CustomerVerification
creditCheck.setSuffix(null);
String pinAndPreciseId = null;
try
pinAndPreciseId = executeCreditCheck(creditCheck, errorResponses, transactionId);
if (pinAndPreciseId.contains("Error"))
ErrorResponse errorResponse = new ErrorResponse("EXPERIAN", pinAndPreciseId, "E01", transactionId);
errorResponses.add(errorResponse);
customerVerification.setErrorResponses(errorResponses);
return customerVerification;
catch (Exception e)
throw new EnterpriseCustomerVerificationException(e.getMessage());
executeCreditCheck 类
private String executeCreditCheck(CreditCheck creditCheck, List<ErrorResponse> errorResponses, String transactionId)
throws UnsupportedOperationException, IOException
LOG.info("Calling experian");
String pinAndPreciseId = null;
String request = null;
String referenceId = null;
DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
Date today = new Date();
referenceId = formatter.format(today);
HttpPost experianHttpPost = getExperianHttpPostMethod();
NetConnectRequest netConnectRequest = ExperianCreditMapper.map(creditCheck, eai, dbHost, referenceId,
experianProduct, opInitials, preamble, subCode, arfVersion, venderNumber, vendorVersion, null,
CustomRRDashKeyword);
System.err.println("REQUEST -- " + netConnectRequest.toString());
request = "NETCONNECT_TRANSACTION=" + URLEncoder.encode(netConnectRequest.toString());
experianHttpPost.setEntity(new ByteArrayEntity(request.getBytes("UTF-8")));
HttpResponse response = experianHttpClient.execute(experianHttpPost);
pinAndPreciseId = ExperianCreditMapper.getPIN(response);
return pinAndPreciseId;
谁能给我一个关于如何模拟 私有方法 executeCreditCheck 的想法,该方法采用 3 个参数,其中一个是 List 类型。
注意:我在这里只给出了部分代码。请有人给 我有一个关于如何模拟 executeCreditCheck 方法的想法。
【问题讨论】:
A) 你会考虑在这里使用间谍。 B)基本上你在这里有难以测试的代码。与其以某种方式进行测试,不如退后一步思考改进设计的方法……这样测试变得更容易。 【参考方案1】:关于不测试私有方法或如何测试的天气存在巨大争议。就个人而言,我不直接测试私有方法。会有调用私有方法的公共方法,我更喜欢间接测试,我可能做错了。
回到你的问题,
您可以使用 powermock Whitebox.invokeMethod() 来测试私有方法。它的语法是
WhiteboxImpl.invokeMethod(<class object>, “<Name of the private Method>",input param1, input param2,…);
【讨论】:
我支持您不要测试私有方法的观点,因为此测试通常可能会在您修改 implelentation 而不改变行为的 refactorings 期间中断。但是 UnitTests 只有在单元行为发生变化时才应该停止,以便在重构期间成为安全防护。以上是关于如何使用 power mock 模拟将 List 类型作为参数的私有方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
jest.mock():如何使用工厂参数模拟 ES6 类默认导入
如何使用 power mock 对 Spring Boot Rest 控制器和异常处理程序进行单元测试