首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mocking时匹配器无效

mocking时匹配器无效
EN

Stack Overflow用户
提问于 2016-07-16 05:47:05
回答 1查看 111关注 0票数 0

我想测试一下这个方法:

代码语言:javascript
复制
public void some_method(SomeFactory someFactory) {
        A a = someFactory.populateWithParameter(parameter1, parameter2, parameter3, parameter4); 
        a.method_call();
        ....   
    }

工厂走这条路

代码语言:javascript
复制
public class SomeFactory(){

 // some constructor
public A populateWithParameter(SomeClass1 someClass1, SomeClass2 someClass2, String string, int parameter){
 return new A(someClass1, someClass2, string, parameter)
} 
}

测试结果是

代码语言:javascript
复制
public void testSomeMethod() throws Exception {
        SomeFactory someFactory = mock(SomeFactory.class);
        when(someFactory.populateWithParameter(
                any(SomeClass1.class), any(SomeClass2.class),
             anyString(), anyInt())).thenReturn(notNull());

        mainActivity.some_method(someFactory);
...
    }

我收到了这个消息

代码语言:javascript
复制
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
4 matchers expected, 1 recorded:
EN

回答 1

Stack Overflow用户

发布于 2016-07-19 01:05:32

不允许使用notNull()作为返回值。Mockito匹配器只代表whenverify调用中的参数,不能作为返回值使用。特别是,notNull()实际上将返回null,并将“非null”匹配标记为隐藏堆栈的副作用,它会一直挂起,直到您下次与模拟交互(当您实际调用some_method时)。

尽管您没有列出InvalidUseOfMatchersException的堆栈跟踪,但我敢打赌,错误实际上是在通过some_method调用populateWithParameter时发生的,而不是在存根populateWithParameter时。"1记录的“匹配器是notNull(),其中"4个匹配器预期”指的是方法调用中的参数数量。错误消息实际上是为某些参数忘记使用匹配器的情况量身定做的,比如populateWithParameter(any(), any(), anyString(), 42),这是一个非常常见的错误。

虽然我在评论中看到“它不工作!”当您尝试返回一个实例时,我可以保证返回notNull()绝对会导致问题,而返回一个实例可能只会揭示一个不同的问题。在切换到返回实例后,您可能希望使用完整堆栈跟踪更新您的问题,或者提出新问题。

有关幕后Mockito匹配器的更多信息,请参阅my question/answer here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38405441

复制
相关文章

相似问题

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