Mock Lazy 构造函数参数
Mock Lazy constructor parameter
这是我的第一个问题,如果我做错了什么,我深表歉意。
我正在测试一个采用注入的 Lazy Dagger 构造函数参数的用例。
import dagger.Lazy
class TrackSpeed (val analyticsRepository: Lazy<AnalyticsRepository>) {
fun execute(timeMillis: Long) {
analyticsRepository.get().trackSpeed(timeMillis)
}
}
我不知道如何模拟 AnalyticsRepository,因为它是惰性的。
这就是我的测试 class 现在的样子:
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.TrackSpeed.execute()
处转换为 com.package.AnalyticsRepository
有什么建议吗?
提前致谢。
您可以创建 Lazy 的实际实例,returns 您在 get() 中模拟的 AnalyticsRepository:
analyticsRepository = mock<AnalyticsRepository>()
val lazy = Lazy<AnalyticsRepository> { analyticsRepository }
trackSpeed = TrackSpeed(lazy)
这是我的第一个问题,如果我做错了什么,我深表歉意。 我正在测试一个采用注入的 Lazy Dagger 构造函数参数的用例。
import dagger.Lazy
class TrackSpeed (val analyticsRepository: Lazy<AnalyticsRepository>) {
fun execute(timeMillis: Long) {
analyticsRepository.get().trackSpeed(timeMillis)
}
}
我不知道如何模拟 AnalyticsRepository,因为它是惰性的。 这就是我的测试 class 现在的样子:
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.TrackSpeed.execute()
处转换为 com.package.AnalyticsRepository有什么建议吗? 提前致谢。
您可以创建 Lazy 的实际实例,returns 您在 get() 中模拟的 AnalyticsRepository:
analyticsRepository = mock<AnalyticsRepository>()
val lazy = Lazy<AnalyticsRepository> { analyticsRepository }
trackSpeed = TrackSpeed(lazy)