#java #android #junit #mockito #dagger-2
Вопрос:
Я новичок в Кинжале и Мокито. Я пытаюсь использовать конструктор, определенный в модуле Dagger в модульном тесте, чтобы объект создавался со значениями по умолчанию.
Это модуль:
@Класс модуля AutoCloseCountDownTimerModule {
@Provides @Singleton fun getAutoCloseCountDownTimer( userInteractionClient: UserInteractionClient, rxPositionManager: RxPositionManager ): AutoCloseCountDownTimer { return AutoCloseCountDownTimer(userInteractionClient, rxPositionManager, 15000, 45000) }
Вот как я пытался издеваться над классом AutoCloseCountDown в модульном тесте:
@RunWith(MockitoJUnitRunner.class) публичный класс AutoCloseCountDownTimerTest {
@Mock private AutoCloseCountDownTimer autoCloseCountDownTimer; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void basicTest() { final AutoCloseCountDownTimer.Listener mockListener = Mockito.mock(AutoCloseCountDownTimer.Listener.class); autoCloseCountDownTimer.registerListener(mockListener); final int expectedValue = 10; autoCloseCountDownTimer.notifyOnAutoClose(expectedValue); Mockito.verify(mockListener).onAutoClose(expectedValue);
Как я могу добиться того, чтобы в тесте использовался параметр autoclosedCountDownTimer со значениями, заданными dagger?
Ответ №1:
Как правило, вы и не пытаетесь. В тестах вы обычно не вводите параметры в тестируемый объект, вы передаете их напрямую через новый. Которые могут быть обычными или имитационными предметами.
Если вам действительно нужно внедрить, вам нужно будет настроить модуль, который предоставляет объект с помощью функции, аннотированной @Provides, и который создает макет и передает его в параметр при создании экземпляра объекта. Вам также нужно будет сделать это транзитивно с любыми зависимостями, которые вы не издеваетесь. Затем создайте компонент для этого модуля и любых других, которые вам нужны, и используйте этот компонент для внедрения. Но вы действительно хотите избежать этого, если это возможно, модульные тесты должны быть посвящены тестированию небольших функциональных возможностей.