首次进行单元测试,并使用Mockito。我不确定我是否正在考虑正确测试这个问题。情况如下:
在我的Android应用中,我使用的是Model-View-Presenter。我正在尝试在我的presenter类中调用一个名为validateCredential(serviceManager: ServiceManager, email: String, password: String)
的方法来查看我传递给它的服务管理器最终是否会通过mockito验证它来调用回调(此方法由视图调用)。
// method in presenter class
override fun validateCredential(serviceManager: ServiceManager, email: String, password: String) {
loginModel = LoginModel(email, password)
serviceManager.getParent(email, password)
serviceManager.execute()
}
// callback implemented by presenter class
private fun handleLoginResult(result: ServiceManager.RequestResult, data: ByteArray, responseCode: Int, optionalParam: String) {
...
mView.startHomeScreen()
}
presenter类还实现了一个提供给IServiceAsyncTaskCallback
构造函数的回调接口(serviceManager
)。我在这个特定的单元测试中想要的是验证是否mView.startHomeScreen()
被调用。
问题:
execute()
时,如果没有模拟,则测试lib的Android单元将抛出异常。 startHomeScreen()
,所以我应该忘记测试validateCredentialMethod()
并直接调用handleLoginResult(...)
。这比上面的路线好吗?handleLoginResult(...)
来测试是否调用传递给presenter的模拟视图,该方法代码也包含对JSONObject的调用,这是与Android相关的代码,因为它属于android.jar文件,它会抛出异常因为它没有被嘲笑!我是否应该为此提供注射?!我迷失了如何测试这个。验证模拟视图是否调用了startHomeScreen()
?
答案 0 :(得分:1)
问题是你试图在一个单元测试中测试两个单独的类,这使它不是一个单元测试。
使用您当前的设置,您似乎希望拥有3个不同的测试用例,分为2个不同的类别(组成名称,尝试尽可能明确地说明其内容):
PresenterTest
ServiceManagerTest