Android 开发 单元测试 (Mock)
上一篇文章中说了JUnit4的作为单元测试的情况下去测试java代码的基本用法, 主要讲到了一些用在有返回值的方法,那么这章, 来介绍怎么测试返回值类型为void的代码的如何测试
假设有这样一段代码
public void loginApp(String name, String password){
if (name == null || name.length() == 0) return;
if (password == null || password.length() < 6) return;
ligon(name, password, new NetworkCallback() {
@Override
public void onSuccess(String msg) {
}
@Override
public void onFailure(String msg) {
}
});
}
public void ligon(String name, String password,NetworkCallback networkCallback){
user.setName(name);
user.setPassword(password);
if (name.equals("TaioPi") && password.equals("123456")) {
networkCallback.onSuccess("OK");
}else {
networkCallback.onFailure("FAIL");
}
}
怎么办
使用Mock(模拟对象)
Mock: Mock的概念,其实很简单, 所谓的mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象
结果
用来验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等,
指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作
Mock框架 : Mockito
首先还是Mockito 使用的步骤
先导包
testCompile "org.mockito:mockito-core:+"
androidTestCompile "org.mockito:mockito-android:+"
模拟并替换测试代码中外部依赖
执行测试代码
验证测试代码是否被正确的执行
简单实用Mockito
我们这里使用 2.x 来介绍 ,跟刚上一篇一样, 我们这里先把 Mockito的主要功能先列出来, 之后再进行实例使用
1.验证某些行为
一旦mock对象被创建了,mock对象会记住所有的交互。然后你就选择性的验证交互。
// mock creation 创建mock对象
MockotiTestBean mockotiTestBean = mock(MockotiTestBean.class);
//using mock object 使用mock对象
mockotiTestBean.setMockName("TaioPi");
mockotiTestBean.setMockAge("26");
//verification 验证
verify(mockotiTestBean).setMockName("TaioPi");
verify(mockotiTestBean).setMockAge("26");
2.测试桩 Stub
先说一下概念 : Stub完全是模拟一个外部依赖,用来提供测试时所需要的测试数据。
// 你可以mock具体的类型,不仅只是接口
// mockotiTestBean = mock(MockotiTestBean.class);
// stubbing 测试桩