Как смоделировать Android `Tasks.await ()`?

Итак, я пишу метод для модульного тестирования взаимодействия с Firebase auth - мне удалось успешно смоделировать все остальное, что нужно, но я не уверен, как смоделировать вызов тестируемого метода для Tasks.await(someTask).someValue.

Поскольку Tasks.await() статичен, я не могу над ним издеваться.

Я могу имитировать саму задачу, но не вызов метода ожидания. Есть ли способ заставить Tasks.await() думать, что задача реальна, чтобы она работала нормально?

Я могу что-нибудь здесь сделать?

2
0
653
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Насколько я знаю, для этого вам понадобится PowerMockito, потому что Mockito не может имитировать статические или окончательные классы / методы.

Короче говоря, вам нужно аннотировать свой тестовый класс с помощью

@RunWith(PowerMockRunner.class)
@PrepareForTest(Tasks.class)

тогда вам нужно включить имитацию / заглушку статических или конечных методов в вашем методе тестирования (или @Before) с помощью

PowerMockito.mockStatic(Tasks.class);

затем используйте

when(Tasks.await()).then<Return|DoNothing|Throw>();

Для более полного ответа см. эта почта

Я думал, что могу как-то банально смоделировать объект задачи с достаточной детализацией, чтобы вызов await() работал правильно. Мне просто интересно, возможно ли это / больше работы, чем она того стоит.

Bassinator 03.08.2018 23:37

Как насчет того, чтобы создать интерфейс и использовать этот метод static в этом интерфейсе. Теперь передайте этот интерфейс как зависимость в вашем классе. Поиграйте с этим интерфейсом. Если вы можете поделиться кодом, я могу показать вам, как передать интерфейс.

Другие вопросы по теме