【发布时间】:2021-09-04 20:20:40
【问题描述】:
我有一个挂起函数,它通过 API 调用来获取一些数据,我正在尝试为 dataRepository 函数编写一个单元测试。
如何让我的函数返回 apiServiceInterface 预期的结果
这是我的单元测试
@RunWith(MockitoJUnitRunner::class)
class MainActivityViewModelTest {
@get:Rule
val coroutineRule = MainCoroutineRule()
@Mock
private lateinit var dataRepository: DataRepository
@Mock
private lateinit var dataObserver: Observer<Result<List<Character>>>
@InjectMocks
private lateinit var mainActivityViewModel: MainActivityViewModel
@Test
fun fetchCharacters() {
runBlockingTest {
Mockito.`when`(dataRepository.getCharacters())
.thenReturn( arrayListOf(Character(
name = "myName",
img = "image",
occupation = arrayListOf<String(),
status = "status",
nickname = "nickName",
appearance = arrayListOf<Int>()
)))
mainActivityViewModel.fetchCharacters()
verify(dataRepository).getCharacters()
Mockito.verify(dataObserver).onChanged(Result.success(listOf(Character (
name = "myName",
img = "image",
occupation = arrayListOf(),
status = "status",
nickname = "nickName",
appearance = arrayListOf()
))))
mainActivityViewModel.charactersLiveData.removeObserver(dataObserver)
}
}
}
错误信息
数据存储库
class DataRepository @Inject constructor(
private val apiServiceInterface: ApiServiceInterface
) {
suspend fun getCharacters(): Result<ArrayList<Character>> = kotlin.runCatching{
apiServiceInterface.getDataFromApi()
}
}
APIService接口
interface ApiServiceInterface {
@GET("api/characters")
suspend fun getDataFromApi(): ArrayList<Character>
}
你能建议我如何解决这个问题
谢谢 回复
【问题讨论】:
-
您需要根据该错误消息将
arrayListOf()包装在Result中。 -
你修好了吗??结果类默认是 Kotlin 或者你有一个自定义的 Result 类??
标签: android unit-testing kotlin mockito