【发布时间】:2021-01-03 05:07:11
【问题描述】:
我试图在单元测试中从 RxJava2 获得响应,我找到了一个示例如何做到这一点,但我看不到和响应,你能帮我吗?谢谢你。 代码本身已经工作了很长时间,没有问题,而当需要测试时我遇到了问题,类似的例子或多或少都是一样的,但是到处都是这样,但它对我不起作用。
演示者那里有我的代码:
fun register(
email: String,
password: String,
termsEnabled: Boolean,
dayOfBirth: Int,
monthOfBirth: Int,
yearOfBirth: Int,
formattedBirthDate: String,
state: String?
) {
addDisposable(
registerUseCase.run(
RegisterUseCase.RegisterRequest(
email,
password,
termsEnabled,
formattedBirthDate,
state ?: ""
)
)
.observeOn(mainThreadScheduler)
.subscribeOn(backgroundScheduler)
.subscribe(
{
getView?.showEmptyPassword()
}, {
getView?.showEmptyPassword()
}
)
)
}
然后测试:
@Before
fun setUp() {
RxAndroidPlugins.setInitMainThreadSchedulerHandler {
Schedulers.trampoline() }
MockitoAnnotations.initMocks(this)
presenter = CreateAccountPresenter(
mainThreadScheduler,
backgroundScheduler,
registerUseCase,
getUserDataUseCase,
getStatesUseCase,
regexUtils,
router,
resourceUtils,
deviceSharedPreferences
)
presenter.setView(view)
}
@Test
fun testRegister() {
given(registerUseCase.run(RegisterUseCase.RegisterRequest(
EMAIL, PASSWORD, true,
FORMATTED_BIRTHDAY, STATE))
).willReturn(Single.just(RegisterResponse(false, "ok", "id")))
presenter.register(
EMAIL,
PASSWORD,
true,
1,
1,
1,
FORMATTED_BIRTHDAY,
STATE)
verify(view).showEmptyPassword()
}
但问题是:
Wanted but not invoked:
view.showEmptyPassword();
-> at
com.unikrn.esports.umode.CreateAccountPresenterTest.testRegister(CreateAccountPresenterTest.kt:179)
Actually, there were zero interactions with this mock.
【问题讨论】:
-
你能包含为测试创建演示者的代码吗?我敢打赌,您在后台威胁中运行所有内容。虽然它适用于应用程序,但它不适用于测试(需要阻止)
-
是的,我试图在代码和测试中设置延迟,没有任何帮助
-
@Pelocho 我认为你是对的,但如何解决?)
标签: android unit-testing mockito rx-java rx-java2