Ответ
В MVP тестирование Presenter'а обычно проводится через unit-тесты с использованием моков/стабов для View и Model. Основные подходы:
- Mockito/JUnit – мокаем View, проверяем вызовы её методов:
@Test
fun `loadData calls showProgress and hideProgress`() {
val mockView = mock(MyView::class.java)
val presenter = MyPresenter(mockView)
presenter.loadData()
verify(mockView).showProgress()
verify(mockView).hideProgress()
}
- Тестирование реакций на колбэки – эмулируем ответы Model:
@Test
fun `onDataLoaded updates view`() {
val mockView = mock(MyView::class.java)
val presenter = MyPresenter(mockView)
presenter.onDataLoaded(testData)
verify(mockView).showData(testData)
}
-
Robolectric – если нужен контекст Android
-
Тестирование потоков – с помощью RxJava TestScheduler или Coroutines TestDispatcher
Ключевое – изолировать Presenter от реальных View/Model, проверять только его логику и взаимодействие с зависимостями.