Параметр Mock Lazy constructor - PullRequest
       4

Параметр Mock Lazy constructor

0 голосов
/ 24 августа 2018

это мой первый вопрос, поэтому прошу прощения, если я сделал что-то не так. Я тестирую сценарий использования, который принимает введенный параметр конструктора Lazy Dagger.

import dagger.Lazy

class TrackSpeed (val analyticsRepository: Lazy<AnalyticsRepository>) {

    fun execute(timeMillis: Long) {
        analyticsRepository.get().trackSpeed(timeMillis)
    }
}

Я не знаю, как издеваться над AnalyticsRepository, потому что это Lazy. Вот как выглядит мой тестовый класс прямо сейчас:

class TrackSpeedTest {

private lateinit var trackSpeed: TrackSpeed
private val analyticsRepository: Lazy<AnalyticsRepository> = mock()

@Before
fun setUp() {
    trackSpeed = TrackSpeed(analyticsRepository)
}

@Test
fun testTrackSpeed() {
    val time: Long = 0

    trackSpeed.execute(time)

    verify(analyticsRepository.get(), times(1))
        .trackSpeed(time)
}

Нет ошибок компиляции, но когда я запускаю тест, происходит сбой с этим исключением:

java.lang.ClassCastException: io.reactivex.internal.operators.flowable.FlowableError не может быть приведен к com.package.AnalyticsRepository в com.package.TrackSpeed.execute ()

Есть предложения? Заранее спасибо.

1 Ответ

0 голосов
/ 24 августа 2018

Вы можете создать фактический экземпляр Lazy, который возвращает ваш смоделированный AnalyticsRepository в get ():

analyticsRepository = mock<AnalyticsRepository>()
val lazy = Lazy<AnalyticsRepository> { analyticsRepository }
trackSpeed = TrackSpeed(lazy)
...