gpt4 book ai didi

java - 如何在反射的私有(private)方法上模拟自动连线的私有(private)响应

转载 作者:行者123 更新时间:2023-12-02 04:51:32 25 4
gpt4 key购买 nike

我正在测试“保存在数据库中”公共(public)方法,该方法还将修改后的一些已保存数据发送到服务。该测试确保它保存收到的数据,但发送不同的修改后的数据。当内部私有(private)方法调用设置为 Autowiring 的存储库时,其响应为 nullPointer,就像 Autowiring 存储库未初始化的反射一样,问题就出现了。

因此,首先要断言私有(private)方法的答案是什么,我对私有(private)方法进行了反射。我用受控响应模拟了内部自动连线服务,但没有发现如何在我的私有(private)反射上设置模拟服务答案的结果。

我对测试还是新手,所以我可能会犯一些错误,解释一下我会尽力纠正它并进一步扩展该主题。

<小时/>

这是一个公共(public)方法“X”,它在数据库中保存一些内容(返回保存的内容的代码),然后执行一些其他操作,然后转到私有(private)方法“Y”来验证一些数据并在该私有(private)方法内转到其他私有(private)方法“Z”,创建一些新数据,从另一个服务“B”检索数据以及之前获得的数据,然后将其发送到外部服务“A”。所有这些都是在同一个类实现“classImpl”中完成的。私有(private)方法“Z”接收与“X”方法相同的数据,它使用从“B”获得的数据生成并返回将在“A”服务中发送的数据。

<小时/>
@Test
@Rollback(false)
@Transactional(readOnly = false)
TEST{

testData testXData= new testData();
testXData.set()...
testXData.set()...
.......Generate data to be saved.

mockResponse controlledOutput = mock(mockResponse.class);

deliverInMockResponse deliverInMockResponse = new deliverInMockResponse();
deliverInMockResponse.set()...
deliverInMockResponse.set()...
.......Generate data to be delivered in the mockResponse.

when(controlledOutput.findByAnd(otherSomething)).thenReturn(deliverInMockResponse);

assertNotNull(testSaveMethodX(testXData));
String Something = "evalutaThis";
assertEquals(testXData.getSomething(),Something);

try{
classImpl publicImpl = new classImpl();
Method method = classImpl.class.getDeclaredMethod("Z", testData.class);
method.setAccessible(true);
methodZResponse Zoutput = (methodZResponse) method.invoke(publicImpl, testXData);
assertNotEquals(Zoutput.getSomething(),Something);
}
catch (Exception e){
assertNotNull(null);
}

}

最佳答案

对于私有(private)方法模拟或测试,我宁愿建议你尝试PowerMock而不是自己写反射(reflection)。 here是一个很好的指导。另外Mock private method using PowerMockito

关于java - 如何在反射的私有(private)方法上模拟自动连线的私有(private)响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56434622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com