любой (MyClass.class), который на самом деле соответствует только классам типа переданного класса? - PullRequest
5 голосов
/ 20 февраля 2012

У меня есть следующий код:

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 типа.

Какова стандартная процедура, позволяющая избежать такого поведения (кроме необходимости писать собственный сопоставитель)?

1 Ответ

6 голосов
/ 20 февраля 2012

Документация показывает, что это известное поведение:

Любой объект, не обязательный для данного класса.Аргумент класса предоставляется только во избежание приведения.Иногда выглядит лучше, чем anyObject () - особенно когда требуется явное приведение

Псевдоним для anyObject ()

Этот метод не выполняет никаких проверок типов , он толькотам, чтобы избежать приведения в вашем коде.Однако это может измениться (проверки типов могут быть добавлены) в будущем основном выпуске.

Похоже, вы должны использовать isA вместо:

verify(javaCompiler).writeJavaAndCompile(isA(ContractCompilationUnit.class),
                                         eq(outputDirectory));
...