首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟操作被测单元的私有字段的闭包

模拟操作被测单元的私有字段的闭包
EN

Stack Overflow用户
提问于 2017-08-25 22:44:14
回答 3查看 600关注 0票数 0

我在被测试的单元中有以下代码:

代码语言:javascript
复制
someDependency.doSomething(element -> {
    privateFieldOfUnitUnderTest += element;
});

一些依赖项(我用mockito模拟过)调用方法doSomething (在实际代码中,它正在进行一些异步调用),它使用一个lambda函数回调来修改被测单元的私有字段。我的问题是如何使用mockito (而不使用powermocking技术)正确地测试这一点。

我希望模拟的方法doSomething使用单元测试提供的一些数据调用回调。

EN

回答 3

Stack Overflow用户

发布于 2017-08-26 02:15:13

如果你模仿了someDependency,你能为doSomething()控制的只有传递和返回的数据。遗漏了doSomething()的实现。这意味着给定的函数接口将不会在doSomething()内部触发。这意味着即使你可以控制element,它也不会被牵扯进来。

我看到了下一个可能的解决方案:

可以在您的test

  • doSomething()中模拟的someDependency

  • Call real doSomething()

  • Have

  • someDependency

  • Call的spy一起工作应重新制作以与getElement()

一起工作

票数 2
EN

Stack Overflow用户

发布于 2017-08-25 23:10:59

尝试:

代码语言:javascript
复制
Mockito
  .doAnswer(i -> privateFieldOfUnitUnderTest += i.getArgument(0, Integer.class))
  .when(someDependency).doSomething(Matchers.any());

我没有测试它,但应该可以像预期的那样工作。

票数 1
EN

Stack Overflow用户

发布于 2017-08-28 16:39:29

UnitTest验证被测代码(cut)的公共可观察行为。

如果您的帖子中截取的代码是cut的一部分,那么您必须验证是否使用预期的参数调用了someDependency.doSomething()方法:

代码语言:javascript
复制
// prepare mocks for dependencies
// prepare cut
// execute tested public method in cut
verify(dependency).doSomething(EXPECTED_SUM_OF_ELEMENT_AND_PRIVATE_PROPERTY_VALUE); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45883978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档