Dra*_*ake 0 junit android mockito kotlin
我试图用测试来覆盖演示者。演示者用例作为数据源。用例的 Execute 方法具有以下结构:fun execute(params: TInput? = null, onNext: (TOutput) -> Unit, onError: (Throwable) -> Unit).
我的问题是如何从 onNext 和 onError 模拟发射?
这是我的 PresenterTest:
class AssignmentsPresenterTest : UnitTest() {
@Mock lateinit var dataRepository: IDataRepository
@Mock lateinit var viewState: AssignmentsView
lateinit var execute: ExecuteUseCase
lateinit var presenter: AssignmentsPresenter
@Before fun setUp() {
execute = ExecuteUseCase(dataRepository)
presenter = AssignmentsPresenter()
presenter.attachView(viewState)
}
@Test fun `should return list of assignments`() {
given {
execute.execute(anyVararg(), { }, { })
}.willReturn(anyVararg())
}
}
Run Code Online (Sandbox Code Playgroud)
演示者代码:
@InjectViewState
class AssignmentsPresenter : BasePresenter<AssignmentsView>() {
@Inject lateinit var executeUseCase: ExecuteUseCase
private var items: MutableList<AssignmentExpandableModel> = mutableListOf()
init {
BTApplication.getApplicationComponent()?.mainComponent()?.inject(this)
}
fun getAssignments(text: String? = null) {
viewState.showLoading()
executeUseCase.execute(
onNext = { handleSuccessDefault(it) },
onError = { handleError(it) })
}
}
Run Code Online (Sandbox Code Playgroud)
用例代码:
class ExecuteUseCase @Inject constructor(private val dataRepository: IDataRepository)
: UseCase.RxObservable<ExecutePresentationQuery, AssignmentWrapper>() {
override fun build(params: ExecutePresentationQuery?): Observable<AssignmentWrapper> {
return dataRepository.execute(it)
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
日志:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:参数匹配器的使用无效!预期 0 个匹配器,记录 1 个:-> 在 com.bottomline.partnerselect.presentation.presenter.assignments.AssignmentsPresenterTest$should return list of assignments$1.invoke(AssignmentsPresenterTest.kt:30) //在文件中结束括号
如果匹配器与原始值结合使用,则可能会发生此异常: //incorrect: someMethod(anyObject(), "raw String"); 使用匹配器时,所有参数都必须由匹配器提供。
错误消息中最重要的部分是:
使用匹配器时,所有参数都必须由匹配器提供。
你有
execute.execute(anyVararg(), { }, { })
Run Code Online (Sandbox Code Playgroud)
anyVararg()(顺便说一句。为什么不是常规的any()?)是匹配器,而{}不是。
{}是 Kotlin 中的普通函数定义。它是一个什么都不做的函数(带有零个或一个参数)。
所以你的论点之一是匹配器,而其他论点不是,它违反了 Mockito 规则。
您可以以与常规对象相同的方式模拟函数(使用 mockito-kotlin):
val onNext = mock<(TOutput) -> Unit>()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5077 次 |
| 最近记录: |