C同学的工作笔记 Mockito模拟测试框架学习笔记(一)

因为不知道是不是需要补充说明,所以就先在标题上加(一)了


好了,首先说目的吧


说实话前端工程师在跟接口交互时确实是个麻烦事,不管是开发中还是后期的测试维护,毕竟影响的因素太多


例如前台需要的各种不同情况的模拟,多种类别的数据,甚至是多种网络情况的模拟,不论对前台还是后台都是麻烦事 ,要为此耽搁双方大量的时间


然后我们的技术总监就推荐了这个,查了查确实是好评一片,不过看了几个教程都不太懂,有个好的,还是纯英文的 http://www.vogella.com/tutorials/Mockito/article.html


就在此记录下学习过程,对其他初学者也能有所帮助,同时也希望有大牛看出错误或有所指点,里面好多东西我都是似懂非懂。。。


然后首先就是引用方法,3种,maven,gradle,或者自己去下载包,在此就主要说gradle了


官方的是

dependencies {
    // the following is required to use Mockito and JUnit for your 
    // instrumentation unit tests on the JVM
  androidTestCompile 'junit:junit:4.12'
    androidTestCompile 'org.mockito:mockito-core:1.+'
    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile "com.google.dexmaker:dexmaker:1.2"
    androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2"
    
    // the following is required ot use Mockito and JUnit for your unit
    // tests on the JVM
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.+'
   
}


作为一个gradle初学者,对于androidTestCompile 和testCompile 不太了解,也没有在程序中建立测试目录


这个博客倒是不错 http://blog.csdn.net/maosidiaoxian/article/details/42023609,不过也没搞懂


进度比较紧,所以先就这样了:

dependencies {
    compile 'junit:junit:4.12'
    compile 'org.mockito:mockito-core:1.+'
    compile "com.google.dexmaker:dexmaker:1.2"
    compile "com.google.dexmaker:dexmaker-mockito:1.2"
} 


不知道有木有问题。。。总之下一步!


然后就是测试代码了


首先先建立一个测试类

<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:9.0pt;"><span style="color:#629755;"><em>/**
</em></span><span style="color:#629755;"><em> * Mockito测试类
</em></span><span style="color:#629755;"><em> *
</em></span><span style="color:#629755;"><em> * Created by chenhaowen on 2015/7/21.
</em></span><span style="color:#629755;"><em> */
</em></span><span style="color:#cc7832;">public interface </span>SuperMockitoDAL {

    <span style="color:#629755;"><em>/**
</em></span><span style="color:#629755;"><em>     * 获得基础信息
</em></span><span style="color:#629755;"><em>     * */
</em></span><span style="color:#629755;"><em>    </em></span>String <span style="color:#ffc66d;">getNormalData</span>()<span style="color:#cc7832;">;
</span><span style="color:#cc7832;">
</span><span style="color:#cc7832;">    </span><span style="color:#629755;"><em>/**
</em></span><span style="color:#629755;"><em>     * 获得特殊信息
</em></span><span style="color:#629755;"><em>     * */
</em></span><span style="color:#629755;"><em>    </em></span>String <span style="color:#ffc66d;">getSpecialData</span>()<span style="color:#cc7832;">;
</span><span style="color:#cc7832;">
</span><span style="color:#cc7832;">    </span><span style="color:#629755;"><em>/**
</em></span><span style="color:#629755;"><em>     * 获得失败信息
</em></span><span style="color:#629755;"><em>     * */
</em></span><span style="color:#629755;"><em>    </em></span>String <span style="color:#ffc66d;">getFailData</span>()<span style="color:#cc7832;">;
</span><span style="color:#cc7832;">
</span><span style="color:#cc7832;">    </span><span style="color:#629755;"><em>/**
</em></span><span style="color:#629755;"><em>     * 获得特殊失败信息
</em></span><span style="color:#629755;"><em>     * */
</em></span><span style="color:#629755;"><em>    </em></span>String <span style="color:#ffc66d;">getSpecialFaillData</span>()<span style="color:#cc7832;">;
</span><span style="color:#cc7832;">
</span><span style="color:#cc7832;">
</span>}
 

 

这个很简单,加入了获取数据的几种情况

然后创建一个实体类实现它

import static org.mockito.Mockito.*;
/**
 * 演示参考类
 *
 * Created by chenhaowen on 2015/7/21.
 */
public class TestDAL implements SuperMockitoDAL{

    static TestDAL testDAL;

    public static TestDAL getInstance(){
        /**
         * 生成实例
         * */
        testDAL = mock(TestDAL.class);

        /**
         * 设置测试事件条件及返回值
         * */
        when(testDAL.getNormalData()).thenReturn("NormalData One").thenReturn("NormalData Two");
        when(testDAL.getSpecialData()).thenReturn("SpecialData");
        when(testDAL.getFaillData()).thenReturn("FaillData");
        when(testDAL.getSpecialFaillData()).thenReturn("SpecialFaillData");

        return testDAL;
    }

    @Override
    public String getNormalData() {
        return null;
    }

    @Override
    public String getSpecialData() {
        return null;
    }

    @Override
    public String getFaillData() {
        return null;
    }

    @Override
    public String getSpecialFaillData() {
        return null;
    }
}

OK,这样就基本完成了,然后我解释一下哈

  testDAL = mock(TestDAL.class);


这个就是实例这个测试类的方法,但不是一般的实例,调用mock后,我们可以在后面加入具体的逻辑


简单来说,就是调用这个类相应方法的时候,给与相应的值


触发条件的设置使用when方法,例如when(testDAL.getNormalData()) 就是指调用testDAL.getNormalData()方法的时候


然后通过 thenReturn 方法设置返回值,这里的返回值类型并不局限于String,可以自由设置


when(testDAL.getNormalData()) .thenReturn ("NormalData");

就是指,当testDAL调用getNormalData()方法时,就返回给它"NormalData"


同时,thenReturn 是可以叠加的,例如:

when(testDAL.getNormalData()).thenReturn("NormalData One").thenReturn("NormalData Two");
就是指第一次调用时,返回“NormalData One”,第二次调用时返回“NormalData Two”


简单的各种情况的模拟就这样了,调用它的方法就是:

/**
 * 生成实例
 * */
TestDAL testDAL = TestDAL.getInstance();

Toaster.showLong(getActivity(), "getNormalData 1: " + testDAL.getNormalData() +
        "\ngetNormalData 2:" + testDAL.getNormalData() +
        "\ngetSpecialData:" + testDAL.getSpecialData() +
        "\ngetFaillData:" + testDAL.getFaillData() +
        "\ngetSpecialFaillData:" + testDAL.getSpecialFaillData());


你只用把它写进你的接口请求数据返回里就可以了



基本的就是这样了,但是像assertEquals、assertNotNull、verify之类的方法,还是不知道怎么用,这些方法既没有返回值,也没有输出,我怎么样知道结果呢?


还有像超时、慢速之类的,又要如何测试呢?









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值