【发布时间】:2018-03-19 07:55:33
【问题描述】:
我正在测试单个用例。但是测试观察者不会在测试环境中发出任何东西。
- 即使我将
subscribeOn()从Schedulers.newThread()更改为TestScheduler()仍然测试失败。我很困惑。我不知道是什么 我在这里做错了吗? - 如果我删除
subscribeOn,observeOn方法然后测试成功。然后TestScheduler()的实际用途是什么?
以下是UseCase.kt 文件
abstract class UseCase<T>(val postExecutionThread: PostExecutionThread) {
abstract fun buildUseCaseBuilder(): Observable<T>
/**
* execute method for observables
*/
open fun execute(): Observable<T> {
return buildUseCaseBuilder()
.subscribeOn(Schedulers.newThread())
.observeOn(postExecutionThread.getScheduler())
}
}
用上面的被测类跟随测试类
class UseCaseTest {
val postExecutionThread=Mockito.mock(PostExecutionThread::class.java)
val result: String="test"
val testObserver=TestObserver<String>()
@Before
fun setUp() {
_when(postExecutionThread.getScheduler()).thenReturn(TestScheduler())
}
@Test
fun `test execute method of use case`() {
println(" thread type ${postExecutionThread.getScheduler()}")
//test fail
//java.lang.AssertionError: Value count differs; Expected: 1 [test], Actual: 0 [] (latch = 1, values = 0, errors = 0, completions = 0)
TestUseCase(postExecutionThread).execute().test()
.assertResult(result)
//subscriber not print any thing
TestUseCase(postExecutionThread).execute().subscribe{
println("called $it")
}
}
inner class TestUseCase(postExecutionThread: PostExecutionThread?) : UseCase<String>(postExecutionThread!!) {
override fun buildUseCaseBuilder(): Observable<String> {
return Observable.just(result)
}
}
}
【问题讨论】:
标签: android testing junit kotlin rx-java2