我在用例单元测试中遇到问题。这是用例代码-
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
我在这里犯什么错误?
您也可以建议我在用例中还可以测试的内容
@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))
}