我正在尝试为我的测试学习Mockito但是在使用Kotlin时它更复杂。我想在我的演示者中测试一个函数,该函数在被调用时异步从存储库中获取对象列表并从侦听器触发onSuccess / onError。之后,演示者告诉视图根据回调做任何需要的事情。
这是测试代码:
<iframe id="iframe" src="about:blank" name="w iframe">
</iframe>
这是经过测试的代码:
@Mock
lateinit var view: CategoriesActivityContract.View
@Mock
lateinit var repository: CategoriesRepository
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}
@Test
fun shouldPassCategoriesToView2() {
`doAnswer`({
it: InvocationOnMock? ->
(it!!.arguments[0] as CategoriesRepository.OnGetCategoriesListener).onSuccess(DUMMY_CATEGORIES)
null
}).`when`(repository).getCategoriesAsync(any(CategoriesRepository.OnGetCategoriesListener::class.java))
val presenter: CategoriesActivityPresenter = CategoriesActivityPresenter(repository)
presenter.bindView(view)
presenter.loadCategories()
`verify`(view).displayCategories(DUMMY_CATEGORIES)
}
测试失败并显示以下错误消息:
override fun loadCategories() {
repository.getCategoriesAsync(object: CategoriesRepository.OnGetCategoriesListener {
override fun onSuccess(categories: List<Category>) {
if (!categories.isEmpty()) {
view?.displayCategories(categories)
} else {
view?.displayNoCategoriesError()
}
}
override fun onError(message: String?) {
view?.displayNoCategoriesError()
}
})
}
答案 0 :(得分:3)
Mockito.any(Class<T>)
返回null
([1],[2]),getCategoriesAsync
方法不接受此内容。
您可以使用Mockito-Kotlin库,它不会返回空值&#39;克服这个问题。