构建Instrumented单元测试

本文翻译自:构建Instrumented单元测试

水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!

构建Instrumented单元测试

Instrumented单元测试运行在你的物理设备或模拟器上,而不是你本地机器中的jvm。如果你需要获取instrumentation信息(比如目标App的Context)或者 你需要一个android framework 组件(比如Parcelable or SharedPreferences 对象)的真实实现你就需要创建instrumented单元测试。使用instrumented单元测试也可以帮助减少编写和维护mock代码的工作。你依旧可以自由的使用mocking框架,如果你选择了该框架,就可以用来来模拟建立和各种依赖的关系。Instrumented单元测试可以利用Android框架的Api和supporting api,比如:Android Testing Support Library.

设置你的测试环境

在你构建instrumented单元测试之前,确保你的工程按照开始你的测试中描述的那样配置了你的测试代码目录和工程依赖。

创建一个Instrumented单元测试类

你的instrumented单元测试类应该被写为一个JUnit4测试类。学习更多关于创建JUnit4测试类和使用JUnit4进行断言和注解,参见构建本地单元测试

为了创建一个instrumented JUnit4测试类,在开始定义你的测试类前添加注解: @RunWith(AndroidJUnit4.class)。你也需要具体声明Android Testing Support Library提供的AndroidJUnitRunner类作为你的默认测试运行器。这个步骤更详细的描述参见:开始你的测试

下面的例子向你展示了如何编写一个instrumented单元测试来验证LogHistory类对Parcelable接口的实现是否正确:

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() {
        // Set up the Parcelable object to send and receive.
        mLogHistory.addEntry(TEST_STRING, TEST_LONG);

        // Write the data.
        Parcel parcel = Parcel.obtain();
        mLogHistory.writeToParcel(parcel, mLogHistory.describeContents());

        // After you‘re done with writing, you need to reset the parcel for reading.
        parcel.setDataPosition(0);

        // Read the data.
        LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel);
        List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData();

        // Verify that the received data is correct.
        assertThat(createdFromParcelData.size(), is(1));
        assertThat(createdFromParcelData.get(0).first, is(TEST_STRING));
        assertThat(createdFromParcelData.get(0).second, is(TEST_LONG));
    }
}

创建一个测试套装

为了组织你的instrumented单元测试的执行,你可以收集这些测试类将他们组织为一个测试套装然后一起运行这些测试了。测试套装可以相互嵌套,你的测试套装可以包含其它的测试套装然后一起运行这些测试类。

一个测试套装被包含在一个测试包中,和主应用的包相似。通常,测试套装包的名字一般以.suite扩展名结尾(比如:com.example.android.testing.mysample.suite)

为你的单元测试创建测试套装时,导入JUnit RunWith 和 Suite 类。在你的测试套装中,添加 @RunWith(Suite.class) 和@Suite.SuitClasses() 注解。在@Suite.SuiteClasses() 注解中,列出独立的测试类或者测试套装作为参数。

下面的例子展示了如何实现一个名字为UnitTestSuite的测试套装,它把CalculatorInstrumentationTest和CalculatorAddParameterizedTest测试类组织在一起来运行他们。

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

// Runs all unit tests.
@RunWith(Suite.class)
@Suite.SuiteClasses({CalculatorInstrumentationTest.class,
        CalculatorAddParameterizedTest.class})
public class UnitTestSuite {}

运行Instrumented单元测试

按照开始你的测试中所描述的那样来运行你的Instrumented单元测试。

时间: 2024-11-10 14:11:48

构建Instrumented单元测试的相关文章

Android测试:从零开始3—— Instrumented单元测试1

Instrumented单元测试是指运行在物理机器或者模拟机上的测试,这样可以使用Android framework 的API和supporting API.这会在你需要使用设备信息,如app的Context,你可以使用Instrumented单元测试.使用Instrumented单元测试还可以减少mock的代码(当然也可以选择写mock的代码). 一般测试代码放在app/src/androidTest/java/下面.开始测试之前需要在build.gradle配置中引入依赖库: depende

Android测试(五):Instrumented 单元测试

Android测试(五):Instrumented 单元测试 发布时间 2017年12月20日 虫师 原文:https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html Instrumented 单元测试是在真机和模拟器上运行的测试,它可以利用Android框架API和支持的API(如Android测试支持库).如果你的测试需要访问工具信息(例如目标应用程序的Context),或者

构建本地单元测试

本文翻译自:Building Local Unit Tests 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进! 构建本地单元测试 如果你的单元测试没有依赖或者仅有简单的Android依赖,你应该在你的本地开发机器上运行你的测试.这种测试是非常高效的,在你每次运行你的测试的时候,他可以帮助你避免加载整个待测试的App进入你的设备或者模拟器.因此,你的单元测试执行时间将大幅度的减少.这种测试,你通常需要使用mock框架,像Mockito,来满

spring boot?Swagger2文档构建及单元测试

首先,回顾并详细说明一下在快速入门中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容. @Controller:修饰class,用来创建处理http请求的对象 @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Contro

跨多个App的UI测试

本文翻译自:Testing UI for Multiple Apps 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进! 跨越多个App进行UI测试 通过跨越多个APP之间的交互来测试你的APPUI,让你确认你的APP表现是否正确,比如:用户在你的APP和其他APP之间或者进入系统UI之间进行切换操作时.一个例子比如用户切换至短信APP它允许用户输入一个文本消息,然后切换到Android通讯录来选择要发送的目标,然后再返回短信APP来发送短信

(4.5.4)Android测试TestCase单元(Unit test)测试和instrumentationCase单元测试

Android单元和instrumentation单元测试 Developing Android unit and instrumentation tests Android的单元测试是基于JUnit的.可分为: 1.本地单元测试 - 可以在JVM上运行测试(速度快,优先考虑). 2.Instrumented单元测试 - 需要Android系统 Android的Gradle插件支持在JVM上执行Andr??oid单元测试.它使用特殊版本的android.jar(也称为 Android mocka

Android测试(三):Android 单元测试

Android测试(三):Android 单元测试 发布时间 2017年12月20日 虫师 原文:https://developer.android.com/training/testing/unit-testing/index.html 单元测试是你的应用程序测试策略的基本测试. 通过针对您的代码创建和运行单元测试,你可以轻松验证各个单元的逻辑是否正确. 在每次构建之后运行单元测试可帮助你快速捕获并修复由代码更改引入到应用程序的软件回归. 单元测试通常以可重复的方式实现尽可能小的代码单元(可以

单元测试React

React单元测试——十八般兵器齐上阵,环境构建篇 一个完整.优秀的项目往往离不开单元测试的环节,就 github 上的主流前端项目而言,基本都有相应的单元测试模块. 就 React 的项目来说,一套完整的单元测试能在在后续迭代更新中回归错误时候给与警示,但鉴于 React 本身的特殊性,我们又常常将其与 webpack 等工具相结合,其单元测试的部署相比常规的项目要折腾的多. 本文将作为 React 单元测试系列的开篇,和大家一同逐步构建其单元测试的环境. 你可以在我的仓库下载到本文的示例.

代码大全读书笔记1---进入软件构建的世界

构建实质建设的过程,构建的过程包含计划.设计.检查工作的一些方面. 软件开发过程中的各种不同的活动: 1.定义问题(problem definition) 2.需求分析(requirements development) 3.规划构建(construction planning) 4.软件架构或高层设计(software architecture or high-level design) 5.详细设计(detailed design) 6.编码与调试(coding and debugging)