Android用例和存储库单元测试

问题描述 投票:0回答:1

我在用例单元测试中遇到问题。这是用例代码-

    interface MyUseCase {
        fun performCustomAction(action: MyAction): LiveData<Result>
    }

    class MyUseCaseImpl(private val dataRepository: DataRepository) : MyUseCase {

       override fun performCustomAction(action: MyAction) = liveData {
          emit(Result.DataFetchInProgress)
          emit(dataRepository.performDataOperation(action))
       }
    }

这里是相应的单元测试-

class MyUseCaseImplTest {

    @Rule
    @JvmField
    val rule = InstantTaskExecutorRule()

    private lateinit var myUseCase: MyUseCase

    @Mock
    private lateinit var dataRepository: DataRepository

    @Mock
    private lateinit var liveData: LiveData<Result>

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        myUseCase = spy(MyUseCaseImpl(dataRepository))
    }

    @After
    fun tearDown() {
    }

    @Test
    fun myUseCase_loginUser_expectedUserLoggedIn() {
        val result: LiveData<Result> = myUseCase.performCustomAction(
            MyAction.LoginUser(
                "userName", "password"
            )
        )

        Assert.assertEquals(result, liveData)
    }
}

运行此单元测试时收到此错误-

java.lang.AssertionError: 
Expected :androidx.lifecycle.CoroutineLiveData@4c012563
Actual   :liveData

我在这里犯什么错误?

您也可以建议我在用例中还可以测试的内容

android kotlin junit kotlin-coroutines android-mvvm
1个回答
0
投票
@Test fun myUseCase_loginUser_expectedUserLoggedIn() { `when`( myUseCase.performCustomAction( MyAction.LoginUser( "userName", "password" ) ) ).thenReturn(liveData) val result = myUseCase.performCustomAction( MyAction.LoginUser( "userName", "password" ) ) Assert.assertThat(result, `is`(liveData)) }
© www.soinside.com 2019 - 2024. All rights reserved.