Mockito / Powermock: matcher any () ложно не соответствует (но anyOrNull () делает - PullRequest
1 голос
/ 14 января 2020

Я использую Mockito / Powermock в модульном тесте Android, написанном на Kotlin. У меня есть код следующим образом:

verify(myCompanionMock, atLeastOnce()).someMethod(any(), any())

Но я получаю эту ошибку:

Comparison Failure: 
<Click to see difference>

Argument(s) are different! Wanted:
companion.someMethod(
    <any java.io.File>,
    <any java.io.File>
);
-> at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:182)
Actual invocation has different arguments:
companion.someMethod(
    null,
    null
);

соответственно, если я заменю совпадение any() на anyOrNull() тест проходит. Я вступил с отладчиком, чтобы проверить, что фактические объекты File (которые не являются фиктивными) передаются someMethod (). Я также проверил, что насмешка над объектами stati c Companion работает. (Все остальные тесты на нем выполняются, как и ожидалось).

Stati c Класс Companion записан в Kotlin. Тестируемый класс, вызывающий Companion, записан в Java. @PrepareForTest -аннотации для этих классов установлены правильно (все остальные тесты работают должным образом)

Поэтому мне интересно, пропустил ли я что-то или это проблема с сопоставителями Mockito, о которых я не знаю?

1 Ответ

0 голосов
/ 15 января 2020

Это, кажется, рекомендуемый способ использования сопоставителей аргументов с PowerMock:

// class containing static method
public class Companion {
    public static void someMethod(File a, File b) { }
}

// test class
@RunWith(PowerMockRunner.class)
@PrepareForTest(Companion.class)
public class CompanionTest {

    @Test
    public void testCompanion() {

        PowerMockito.mockStatic(Companion.class);

        // call method with non-null arguments
        Companion.someMethod(Mockito.mock(File.class), Mockito.mock(File.class));

        // verify
        PowerMockito.verifyStatic(Companion.class);
        Companion.someMethod((File) ArgumentMatchers.notNull(), 
                             (File) ArgumentMatchers.notNull());
    }
}

Для меня это работало с использованием JUnit 4, Mockito 2.28.2 и PowerMock 2.0.2.

...