我试图验证我正在测试的类调用正确的依赖类的方法。所以我试图匹配方法参数,但我并不真正关心此测试中的实际值,因为我不想让我的测试变得脆弱。
然而,由于Mockito已经决定我所期待的行为是一个错误,我设置了麻烦:https://github.com/mockito/mockito/issues/134
那么为可能为null的参数定义匹配器的正确方法是什么?
问题#134"已修复",此代码失败,因为匹配器仅在第一种情况下匹配。如何在所有4种情况下定义匹配器?
MyClass c = mock(MyClass.class);
c.foo("hello", "world");
c.foo("hello", null);
c.foo(null, "world");
c.foo(null, null);
verify(c, times(4)).foo(anyString(), anyString());
答案 0 :(得分:32)
来自any()
自Mockito 2.1.0 以来,只允许非空
String
。就这样 是可以为空的引用,建议使用匹配的APInull
包装器为isNull()
。我们觉得这个 改变将使测试更加安全,与Mockito一样 1.x的。
因此,匹配可空字符串参数的方法是显式声明:
nullable(String.class)
答案 1 :(得分:1)
我通过切换到any(String.class)
我发现这有点误导,因为API似乎表明anyString()
只是any(String.class)
的别名,至少在2.0更新之前。公平地说,文档确实指定anyString()
仅匹配非空字符串。这对我来说似乎是违反直觉的。
答案 2 :(得分:-2)
怎么样:
verify(c, times(4)).foo(anyObject(), anyObject());
这对你有用吗?
Matchers.anyObject()允许null
s。
Mockito docs中的参考: