如何基于 Observable 返回值对 Presenter 方法进行单元测试?
How to unit test presenter method based on an Observable returned value?
具有以下函数的实际实现,其中 mTallesPreferences.isUserAuthenticated()
returns 一个 Observable<Boolean>
类型值:
override fun showInitialScreen() {
mTallesPreferences.isUserAuthenticated()
.subscribe { isAuthenticated ->
if (isAuthenticated) mView?.showMainScreen()
else mView?.showAccessScreen()
mView?.closeCurrentScreen()
}
}
如果在订阅者获得 isAuthenticated = false
时调用 mView?.showAccessScreen()
,我如何进行单元测试?
我试过下面的方法,可惜NullPointerException
出现了
class LaunchPresenterTest {
@Mock
lateinit var mView: LaunchContract.View
@Mock
lateinit var mTallesPreferences: TallesPreferencesApi
private lateinit var mPresenter: LaunchPresenter
@Before
fun setupLaunchPresenter() {
MockitoAnnotations.initMocks(this)
mPresenter = LaunchPresenter(mTallesPreferences)
}
@Test
fun testShowInitialScreenNotAuthenticated() {
mPresenter.showInitialScreen()
Mockito.`when`(mTallesPreferences.isUserAuthenticated()).thenReturn(Observable.just(false))
Mockito.verify(mView).showAccessScreen()
}
}
您的函数顺序错误。当您调用 showInitialScreen()
时,mTallesPreferences.isUserAuthenticated()
不会被模拟为 return 您想要的值。重新排序您的测试方法,例如:
@Test
fun testShowInitialScreenNotAuthenticated() {
Mockito.`when`(mTallesPreferences.isUserAuthenticated()).thenReturn(Observable.just(false))
mPresenter.showInitialScreen()
Mockito.verify(mView).showAccessScreen()
}
具有以下函数的实际实现,其中 mTallesPreferences.isUserAuthenticated()
returns 一个 Observable<Boolean>
类型值:
override fun showInitialScreen() {
mTallesPreferences.isUserAuthenticated()
.subscribe { isAuthenticated ->
if (isAuthenticated) mView?.showMainScreen()
else mView?.showAccessScreen()
mView?.closeCurrentScreen()
}
}
如果在订阅者获得 isAuthenticated = false
时调用 mView?.showAccessScreen()
,我如何进行单元测试?
我试过下面的方法,可惜NullPointerException
出现了
class LaunchPresenterTest {
@Mock
lateinit var mView: LaunchContract.View
@Mock
lateinit var mTallesPreferences: TallesPreferencesApi
private lateinit var mPresenter: LaunchPresenter
@Before
fun setupLaunchPresenter() {
MockitoAnnotations.initMocks(this)
mPresenter = LaunchPresenter(mTallesPreferences)
}
@Test
fun testShowInitialScreenNotAuthenticated() {
mPresenter.showInitialScreen()
Mockito.`when`(mTallesPreferences.isUserAuthenticated()).thenReturn(Observable.just(false))
Mockito.verify(mView).showAccessScreen()
}
}
您的函数顺序错误。当您调用 showInitialScreen()
时,mTallesPreferences.isUserAuthenticated()
不会被模拟为 return 您想要的值。重新排序您的测试方法,例如:
@Test
fun testShowInitialScreenNotAuthenticated() {
Mockito.`when`(mTallesPreferences.isUserAuthenticated()).thenReturn(Observable.just(false))
mPresenter.showInitialScreen()
Mockito.verify(mView).showAccessScreen()
}