我的测试单元中有以下代码:
someDependency.doSomething(element -> {
privateFieldOfUnitUnderTest += element;
});
一些依赖项(我用mockito嘲笑)使用lambda函数回调调用方法doSomething(在实际代码中它正在做一些异步调用),该函数回调修改被测单元的私有字段。 我的问题是如何使用mockito正确测试(并且不使用powermocking技术)。
我希望模拟方法doSomething使用单元测试提供的一些数据来调用回调。
答案 0 :(得分:2)
如果您模仿someDependency
,那么doSomething()
可以控制的是传递和返回的数据。错过了doSomething()
的实施。这意味着在doSomething()
内不会触发给定的功能接口。这意味着即使您可以控制element
,也不会涉及它。
我看到下一个可能的解决方案:
someDependency
doSomething()
someDependency.getElement()
可以在您的测试中嘲笑doSomething()
应该重新设计以使用getElement()
答案 1 :(得分:0)
尝试:
Mockito
.doAnswer(i -> privateFieldOfUnitUnderTest += i.getArgument(0, Integer.class))
.when(someDependency).doSomething(Matchers.any());
我没有测试它,但应该按预期工作。
答案 2 :(得分:0)
UnitTest验证被测代码(剪切)的公共可观察行为。
如果您帖子中剪切的代码是该剪辑的一部分,那么您必须验证使用预期参数调用方法someDependency.doSomething()
:
// prepare mocks for dependencies
// prepare cut
// execute tested public method in cut
verify(dependency).doSomething(EXPECTED_SUM_OF_ELEMENT_AND_PRIVATE_PROPERTY_VALUE);