【发布时间】:2020-03-13 23:07:28
【问题描述】:
我有以下课程
interface CarsApi {
suspend fun fetchCar() : Car
}
class FetchCarUseCase(private val carsApi: CarsApi) {
suspend fun execute: Car = withContext(dispatcherProvider.io()) {
carsApi.fetchCar()
}
}
class ViewModel(private val fetchCarUseCase: FetchCarUseCase) {
private var car: Car
suspend fun retrieveCar() {
car = fetchCarUseCase.execute()
}
}
我想为 viewModel 和 useCase 编写一个 ermetic 测试:
@Test
fun testCarFetching() = runBlockingTest {
val aCar = Car()
val mockApi = mock<CarsApi>()
`when`(mockApi.fetchCar()).thenReturn(aCar)
val fetchCarUseCase = FetchCarUseCase(mockApi)
val viewModel = ViewModel(fetchCarUseCase)
viewModel.retrieveCar()
/* assert stuff on viewModel.car*/
}
但 viewModel.car 似乎总是为空。在测试主体内 mockApi.fetchCar() 确实检索到提供的值,但在 FetchCarUseCase 内却没有。此外,如果我从界面中删除了暂停关键字,模拟似乎工作正常。
目前,由于其他一些情况,我无法使用 Mockk 库,所以我被 Mockito 困住了。
我错过了什么吗?
使用的依赖: testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.28.2' testImplementation('com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0') { 排除模块:'mockito-core' } testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.2
【问题讨论】:
-
你能解决这个问题吗?
标签: unit-testing kotlin mockito