【问题标题】:invalid matchers when mocking模拟时无效的匹配器
【发布时间】:2016-07-15 21:47:05
【问题描述】:

我想测试一下这个方法:

public void some_method(SomeFactory someFactory) {
        A a = someFactory.populateWithParameter(parameter1, parameter2, parameter3, parameter4); 
        a.method_call();
        ....   
    }

工厂是这样发展的

public class SomeFactory(){

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

测试是

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);
...
    }

我收到这条消息

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
4 matchers expected, 1 recorded:

【问题讨论】:

  • 也许问题是因为你试图在 thenReturn(notNull()) 中返回一个匹配器。您可以尝试返回 A 的实例(或模拟版本)吗? stackoverflow.com/a/26418391/6526330
  • @Dr.Nitpick 我已经尝试返回一个实例,但它不起作用!
  • 当你说它不起作用时,实际上会发生什么?
  • 如果您的测试的其余部分实际上并未引发异常,请尝试删除 throws Exception

标签: java android mocking mockito


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多