Android单元测试总结

2019-12-07  本文已影响0人  Fizzzzer

Android单元测试总结

一:依赖文件的引入

//主要是Java层面的单元测试
testImplementation 'junit:junit:4.12'
//Android层面的测试
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
//基于UI层面的测试
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

在创建工程的时候,基本上都默认引入了这三个文件了只需要在对应的文件夹下面写代码进行测试就可以了

二:测试类结构介绍

测试类中主要是通过注解来进行标识

一些常用注解介绍

三:Assert

判断一个测试用例是否正确符合预期结果最主要的方法就是用assert(断言)主要的一些断言方法有以下这些

四:批量执行测试用例

有时候我们需要执行多个Test类的话,应该怎么办?其实Junit提供Suite注解,在测试的目录下创建一个空的Test类,然后在该类上添加如下注解就好了

    @RunWith(Suite.class)
    @Suite.SuiteClasses({A.class,B.class,C.class})
    public class TestMain {

    }

然后直接运行这个TestMain这个类,就可以运行A、B、C类中的所有测试案例了

五:获取Android中的context

InstrumentationRegistry.getInstrumentation().getTargetContext();

六:异步线程处理

在进行测试用例中,有时候可能需要调用一些异步线程的API,需要通过回调后的结果来进行用例成功与否的判断,这个时候就需要是使用CountdownLatch这个类。具体可以参见CountDownLatch详细用法

下面是一段代码的示例用法

先对CountDownLatch进行初始化

CountDownLatch mLatch = new CountDownLatch(1);

这个构造方法传了一个1,表示这里有一个异步线程需要等待被执行完成

接下来就是CountDownLatch的使用

PushClient.getInstance(mContext).turnOnPush(new IPushActionListener() {
        @Override
        public void onStateChanged(int state) {
            code = state;
            mLatch.countDown();
        }
    });

try {
    mLatch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
}
Assert.assertEquals(0,code);

七:参数化测试用例

有时候一个测试用例需要传入不同的参数,这种如果这种情况下每一种参数组合写一个调用方法就显得不是那么高大上,这个时候可以参数化测试用例

示例代码:

@RunWith(Parameterized.class)
public class ParamsTest {
    private int paramA;
    private int paramB;
    private int expectValue;

    public ParamsTest(int paramA, int paramB, int expectValue) {
        this.paramA = paramA;
        this.paramB = paramB;
        this.expectValue = expectValue;
    }

    @Parameterized.Parameters
    public static Collection<Object[]> initData() {
        return Arrays.asList(new Object[][]{
                {0, 0, 0},
                {1, 2, 5},
                {5, 6, 7},
                {89, 10, 11}
        });
    }

    private int add(){
        return paramA + paramB;
    }

    @Before
    public void utilsTest(){
        Log.e("Fizzer", "utilsTest: "+ "Fizzer");
    }

    @Test
    public void TestAdd(){
        Assert.assertEquals(expectValue,add());
    }
}

参考文档:

Android单元测试常见框架

Android单元测试只看这一篇就够了

上一篇下一篇

猜你喜欢

热点阅读