Mockito isA()&any ...()

use*_*013 22 mockito

有什么区别:

    verify(mock, times(1)).myMethod(Matchers.isA(String.class));
    verify(mock, times(1)).myMethod(Matchers.anyString());
Run Code Online (Sandbox Code Playgroud)

来自Mockito图书馆?两者都通过我的方法,我想知道哪一个"更好"使用.

Jef*_*ica 22

isA检查该类是否与期望的类匹配.在1.x的的Mockito, ,any,anyObjectanyString忽略的说法完全包括其类型,尽管any可以采取类参数,并anyString指定它的名字.

通常,除非您有理由防止传入不兼容的参数,否则您可能会坚持使用anyanyString.Mockito风格更喜欢灵活的测试用例,这意味着只验证您明确检查的内容,并故意允许其他所有内容都未指定.

更新: Mockito提交者Brice提供了一些历史背景和未来方向:

对于历史参考,any是一个简写别名anything,当时API强制一个人进行转换,贡献者和/或委托者考虑将类作为参数传递以避免这种转换,而不改变此API的语义.然而,这种变化最终改变了人们认为这个API正在做的事情.这将在mockito 2+中修复