3Android构建仪表测试

Posted 宋志辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3Android构建仪表测试相关的知识,希望对你有一定的参考价值。

不同于运行于JVM的本地单元测试,仪表测试运行于你的物理设备或虚拟机中。当你需要访问设备的信息(比如Context)或者使用真正的android framework组件时(比如SharePreferences)时,你需要创建仪表测试。使用仪表测试同样可以帮助你减少mock代码。如果你需要,同样可以使用虚拟框架。

搭建测试环境

第一篇已经阐述

创建仪表测试类

你的仪表测试类风格类似Junit 4 测试类。
创建一个仪表测试类,需要在类定义前面添加 @RunWith(AndroidJUnit4.class) 注解。你也同样需要声明Android Testing Support Library中的AndroidJUnitRunner类为默认的test runner。第一篇已经阐述。
代码示例:

import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.util.Pair;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class LogHistoryAndroidUnitTest 

    public static final String TEST_STRING = "This is a string";
    public static final long TEST_LONG = 12345678L;
    private LogHistory mLogHistory;

    @Before
    public void createLogHistory() 
        mLogHistory = new LogHistory();
    

    @Test
    public void logHistory_ParcelableWriteRead() 
        // 设置 Parcelable 对象用于发送和接收
        mLogHistory.addEntry(TEST_STRING, TEST_LONG);

        // 写入数据
        Parcel parcel = Parcel.obtain();
        mLogHistory.writeToParcel(parcel, mLogHistory.describeContents());

        // 重置
        parcel.setDataPosition(0);

        //读取数据
        LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel);
        List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData();

        // 断言验证结果是否正确
        assertThat(createdFromParcelData.size(), is(1));
        assertThat(createdFromParcelData.get(0).first, is(TEST_STRING));
        assertThat(createdFromParcelData.get(0).second, is(TEST_LONG));
    

创建test suite

为了组织执行你的仪表测试,你可以将想要执行的测试类集中到一个test suite中,同时运行这些测试。Test suite可以被嵌套。
为了创建测试类的test suite,在你的test suite中添加 @RunWith(Suite.class) 和 @Suite.SuitClasses() 注解,在 @Suite.SuiteClasses(),列出测试类或者test suite(嵌套)。
示例如下:

import com.example.android.testing.mysample.CalculatorAddParameterizedTest;
import com.example.android.testing.mysample.CalculatorInstrumentationTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

// 运行所有的单元测试
@RunWith(Suite.class)
@Suite.SuiteClasses(CalculatorInstrumentationTest.class,
        CalculatorAddParameterizedTest.class)
public class UnitTestSuite 

本文作者:宋志辉
个人微博:点击进入

以上是关于3Android构建仪表测试的主要内容,如果未能解决你的问题,请参考以下文章

. 构建仪表盘插件

2017年tfs发布的测试结果图表/图表

CI/CD 实施:5 个常见错误以及如何避免它们

如何安装不同于 Xcode 默认自带的 sdk?

单元测试覆盖率报告未显示在 SonarQube 仪表板上

[4G+5G专题-141]: 终端 - 测试仪表详解