0

これは、stackoverflow に関する最初の投稿であり、kotlin、Lifecycle の初心者であり、サポートが必要です。私はそれで2日を失い、助けが必要です.

SplashViewModel クラスがあります

class SplashViewModel @Inject constructor(
    private val configuration: IConfiguration,
    private val compositeDisposable: CompositeDisposable) : BaseViewModel(compositeDisposable), SplashContract.ViewModel{

override val isLoggedLiveData: MutableLiveData<Boolean> = MutableLiveData()

init {
    setLoginStatus()
}

override fun setLoginStatus(){
    isLoggedLiveData.postValue(configuration.isUserLoggedIn())
}}

SplashViewModelTest クラス

class SplashViewModelTest : BaseTest(){

@get:Rule
val testRule = InstantTaskExecutorRule()

@Mock
private lateinit var configuration: IConfiguration

@Mock
private lateinit var compositeDisposable: CompositeDisposable

@Mock
private lateinit var observer: Observer<Boolean>

private lateinit var viewModel: SplashContract.ViewModel

override fun setup() {
    super.setup()
    trampolineRxPlugin()
    viewModel = SplashViewModel(
            configuration,
            compositeDisposable
    )
}

override fun tearDown() {
    super.tearDown()
    verifyNoMoreInteractions(
            configuration,
            compositeDisposable
    )
}

@Test
fun `should change livedata status to true when viewmodel is initialize`() {
    val isLogged = true

    `when`(configuration.isUserLoggedIn()).thenReturn(isLogged)

    viewModel.isLoggedLiveData.observeForever(observer)

    verify(configuration, Mockito.times(1)).isUserLoggedIn()
    verify(observer).onChanged(isLogged)
}

このテスト結果を実行するとエラーになります

引数が異なります! 募集:observer.onChanged(true); -> com.example.kotlinmvvm.feature.splash.viewModel.SplashViewModelTest.should で、getIsLoggedLiveData が呼び出されたときに構成ユーザーのログイン ステータスを確認する必要があります (SplashViewModelTest.kt:85)

実際の呼び出しにはさまざまな引数があります。observer.onChanged(false); -> androidx.lifecycle.LiveData.considerNotify(LiveData.java:113) で

比較失敗:

期待:observer.onChanged(true);

実際:observer.onChanged(false);

何が起こっているのか誰が知っていますか?

4

1 に答える 1