如何基于 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()
}