随着业务模块的增加,app的编译速度就会变慢,如果开发过程中,我们仅仅需要测试一个模块,普遍的做法就是重新编译运行,导致开发效率变低。这样我们就需要构建单元测试代码。普通的测试类,如果相互依赖(比如A类依赖B类,我们需要测试A类,就需要构建B类对象),这样的操作,也会增加测试成本,还不如直接运行。所以就需要借助第三方框架,本文主要介绍Mockito的集成使用。
一、集成
在项目的build.gradle中添加如下依赖:
testImplementation 'junit:junit:4.12'
// required if you want to use Mockito for unit tests
testImplementation 'org.mockito:mockito-core:2.+'
// required if you want to use Mockito for Android tests
androidTestImplementation 'org.mockito:mockito-android:2.7.22'
第一行和单元测试有关。
二、使用
(一)创建测试类
1、UserBean
public class UserBean {
public int age = 100;
public UserBean(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
2、MockitPresenter
public class MockitPresenter {
private UserBean mUserBean = new UserBean(200);
public void checkSuccess(String name,String password){
System.out.println("验证进来了》》》》 "+name+" "+password);
}
public void startCheck(String name,String password){
System.out.println("开始验证》》》》 "+name+" "+password);
if(isSuccess()){
checkSuccess(name,password);
}
}
public boolean isSuccess() {
return mUserBean.getAge() == 200;
}
}
(二)创建测试类 开始使用Mockito进行单元测试
如果有以下需要:
1、验证方法checkSuccess()是否被调用一次
代码如下:
@Test
public void testMockito() {
//创建MockitPresenter对象
MockitPresenter presenter = Mockito.spy(MockitPresenter.class);
presenter.startCheck("qbb", "123456");
//验证方法checkSuccess是否被调用过1次,且参数一致
Mockito.verify(presenter, Mockito.times(1)).checkSuccess("qbb", "123456");
//验证方法checkSuccess是否被调用过1次,参数忽略
/*Mockito.verify(presenter, Mockito.times(1)).checkSuccess(Mockito.anyString(),
Mockito.anyString());*/
}
可以使用 Mockito.anyString() 忽略参数,否则会校验参数的正确性。由于isSuccess()方法返回true,所以验证通过,打印信息如下:
2、强制执行失败
代码如下:
@Test
public void testMockito() {
//创建MockitPresenter对象
MockitPresenter presenter = Mockito.spy(MockitPresenter.class);
//使方法返回false
Mockito.when(presenter.isSuccess()).thenReturn(false);
presenter.startCheck("qbb", "123456");
//验证方法checkSuccess是否被调用过1次,且参数一致
Mockito.verify(presenter, Mockito.times(1)).checkSuccess("qbb", "123456");
//验证方法checkSuccess是否被调用过1次,参数忽略
/*Mockito.verify(presenter, Mockito.times(1)).checkSuccess(Mockito.anyString(),
Mockito.anyString());*/
}
使用Mockito.when操作方法执行结果。这样导致Mockito.verify验证不通过,打印信息如下:
以上两个简单操作,在实际应用中也可以排上用途,比如判断某个方法是否执行,返回结果是否正确等。
Mockito还有更多的操作方法,可以参考链接Mockito官方文档