Mockito代码测试

随着业务模块的增加,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官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值