我在被测试的单元中有以下代码:
someDependency.doSomething(element -> {
privateFieldOfUnitUnderTest += element;
});一些依赖项(我用mockito模拟过)调用方法doSomething (在实际代码中,它正在进行一些异步调用),它使用一个lambda函数回调来修改被测单元的私有字段。我的问题是如何使用mockito (而不使用powermocking技术)正确地测试这一点。
我希望模拟的方法doSomething使用单元测试提供的一些数据调用回调。
发布于 2017-08-26 02:15:13
如果你模仿了someDependency,你能为doSomething()控制的只有传递和返回的数据。遗漏了doSomething()的实现。这意味着给定的函数接口将不会在doSomething()内部触发。这意味着即使你可以控制element,它也不会被牵扯进来。
我看到了下一个可能的解决方案:
可以在您的test
doSomething()中模拟的someDependency
doSomething()
someDependency
getElement()一起工作
发布于 2017-08-25 23:10:59
尝试:
Mockito
.doAnswer(i -> privateFieldOfUnitUnderTest += i.getArgument(0, Integer.class))
.when(someDependency).doSomething(Matchers.any());我没有测试它,但应该可以像预期的那样工作。
发布于 2017-08-28 16:39:29
UnitTest验证被测代码(cut)的公共可观察行为。
如果您的帖子中截取的代码是cut的一部分,那么您必须验证是否使用预期的参数调用了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); https://stackoverflow.com/questions/45883978
复制相似问题