任何(MyClass.class)实际上只匹配传递类的类型的类?

dev*_*ium 5 java testing unit-testing mocking mockito

我有以下代码:

verify(javaCompiler, times(1)).writeJavaAndCompile(any(ContractCompilationUnit.class), eq(outputDirectory));
verify(javaCompiler, times(1)).writeJavaAndCompile(any(ParamCompilationUnit.class), eq(outputDirectory));       
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

javaCompiler.writeJavaAndCompile(new ContractCompilationUnit(), outputDirectory);
javaCompiler.writeJavaAndCompile(new ParamCompilationUnit(), outputDirectory);
Run Code Online (Sandbox Code Playgroud)

代码失败了,因为看起来第一次验证看到有2次调用javaCompiler.writeJavaAndCompile().它没有意识到只有一种类型的调用ContractCompilationUnit.

避免这种行为的标准程序是什么(除了必须编写我自己的匹配器)?

Jon*_*eet 6

文件表明,这是已知的行为:

任何类型的对象,不是给定类所必需的.提供类参数只是为了避免强制转换.有时看起来比anyObject()更好 - 特别是当需要显式转换时

别名为anyObject()

此方法不进行任何类型检查,只是为了避免在代码中进行转换.但是,这可能会在未来的主要版本中发生变化(可以添加类型检查).

看起来你应该使用isA:

verify(javaCompiler).writeJavaAndCompile(isA(ContractCompilationUnit.class),
                                         eq(outputDirectory));
Run Code Online (Sandbox Code Playgroud)