我有以下代码:
verify(javaCompiler, times(1)).writeJavaAndCompile(any(ContractCompilationUnit.class), eq(outputDirectory));
verify(javaCompiler, times(1)).writeJavaAndCompile(any(ParamCompilationUnit.class), eq(outputDirectory));
我的代码如下:
javaCompiler.writeJavaAndCompile(new ContractCompilationUnit(), outputDirectory);
javaCompiler.writeJavaAndCompile(new ParamCompilationUnit(), outputDirectory);
代码失败,因为第1次验证似乎发现有2次调用javaCompiler.writeJavaAndCompile()
。它没有意识到只有一个ContractCompilationUnit
类型的调用。
避免这种行为的标准程序是什么(除了必须编写我自己的匹配器之外)?
答案 0 :(得分:6)
documentation表明这是已知行为:
任何类型的对象,不是给定类的必需对象。提供类参数只是为了避免强制转换。 有时看起来比anyObject()更好 - 特别是当需要显式转换时
别名为anyObject()
此方法不进行任何类型检查,只是为了避免在代码中进行转换。但是,这可能会在未来的主要版本中发生变化(可以添加类型检查)。
看起来您应该使用isA
代替:
verify(javaCompiler).writeJavaAndCompile(isA(ContractCompilationUnit.class),
eq(outputDirectory));