Итак, я пишу метод для модульного тестирования взаимодействия с Firebase auth - мне удалось успешно смоделировать все остальное, что нужно, но я не уверен, как смоделировать вызов тестируемого метода для Tasks.await(someTask).someValue.
Поскольку Tasks.await() статичен, я не могу над ним издеваться.
Я могу имитировать саму задачу, но не вызов метода ожидания. Есть ли способ заставить Tasks.await() думать, что задача реальна, чтобы она работала нормально?
Я могу что-нибудь здесь сделать?
Насколько я знаю, для этого вам понадобится PowerMockito, потому что Mockito не может имитировать статические или окончательные классы / методы.
Короче говоря, вам нужно аннотировать свой тестовый класс с помощью
@RunWith(PowerMockRunner.class)
@PrepareForTest(Tasks.class)
тогда вам нужно включить имитацию / заглушку статических или конечных методов в вашем методе тестирования (или @Before) с помощью
PowerMockito.mockStatic(Tasks.class);
затем используйте
when(Tasks.await()).then<Return|DoNothing|Throw>();
Для более полного ответа см. эта почта
Как насчет того, чтобы создать интерфейс и использовать этот метод static в этом интерфейсе. Теперь передайте этот интерфейс как зависимость в вашем классе. Поиграйте с этим интерфейсом. Если вы можете поделиться кодом, я могу показать вам, как передать интерфейс.
Я думал, что могу как-то банально смоделировать объект задачи с достаточной детализацией, чтобы вызов
await()работал правильно. Мне просто интересно, возможно ли это / больше работы, чем она того стоит.