我有一个与我的演示者通信的界面,演示者检查表单的字段是否有效。
我的界面是:
interface MainView {
fun showMessage(data: LoginEntity)
fun showEmailError()
fun showPasswordError()
}
我在presenter中的方法是这样的:
fun sendForm(loginData: LoginDataPresentation, view: MainView) {
if (isValid()) {
view.showMessage(mapData(loginData))
} else if (isValidPassword()) {
view.showPasswordError()
} else {
view.showEmailError()
}
}
我的 KotlinTest 测试类:
class LoginPresentationKtTest : StringSpec() {
init {
"given a bunch of Login Data should be matched successfully" {
forAll(EmailGenerator(), PasswordGenerator(), { email: String, password: String ->
val loginData: LoginDataPresentation(email, password)
val mockMainView = mockMainView()
sendForm(loginData, mockMainView())
})
}
}
private fun mockMainView(): MainView {
//How to mock?????
}
}
使用 KotlinTest 库,如果生成的电子邮件和密码始终正确,是否有任何方法可以验证对 MainView 类的 showMessage 方法的调用是否已完成?是否可以使用像 mockito 这样的模拟库?
根据用户@mkobit 的响应,可以使用 Mockito-Kotlin 进行以下修改,测试如下:
class LoginPresentationKtTest : StringSpec() {
init {
"given a bunch of Login Data should be matched successfully" {
forAll(EmailGenerator(), PasswordGenerator(), { email: String, password: String ->
val loginData = LoginDataPresentation(email, password)
val mockMainView = Mockito.mock(MainView::class.java)
sendForm(loginData, mockMainView)
verify(mockMainView).showMessage()
true
})
}
}
}
每次执行循环时,都会检查是否调用了 verify() 函数。如果执行流程是预期的流程,它将继续执行循环的下一个流程。如果verify()函数失败,控制台会出现错误提示测试失败。
有没有更好的解决方案?