zoukankan      html  css  js  c++  java
  • 3、Android构建仪表测试

    不同于运行于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 {}

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

  • 相关阅读:
    js中this应用
    易语言学习
    哈希表和字典List和Ilist和array和arraylist的应用
    ExtJs中decode与encode(转载)
    ajax几种请求几种类型
    关于Json
    简单属性margin和padding
    ==和===的区别
    maven实战读书笔记(三)
    maven实战读书笔记(二)
  • 原文地址:https://www.cnblogs.com/hainange/p/6153451.html
Copyright © 2011-2022 走看看