Android Unit Tests

前言

本文主要通过样例来简要介绍Android单元测试基于AndroidTestCase类,主要针对sdk这种不涉及ui的但是需要依赖AndroidSDK的场景,并可以生成代码的覆盖率报告。

Android Unit Tests

单元测试(Android unit tests)是运行在手机或模拟器上的测试,下面详细介绍如何进行模拟器或手机进行测试。

gradle配置

基于gradle与maven的对比,这里使用Gradle构建工具为例。

AndroidSDK默认提供基于AndroidTestCase的单元测试支持,首先在build.gradle中增加依赖:

编写测试与运行

测试工程

 新建一个Android工程,这里以非常简单的被测类为例,目录结构如下:

DemoA.java

public class DemoA {

    public int funtionA(int a, int b){
        return a + b;
    }

    public int funtionB(int a, int b){
        return a * b;
    }
}

DemoTest.java

public class DemoTest extends AndroidTestCase{

    @Override
    protected void setUp() throws Exception {
        super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void testDemoAWithFunctionA(){
        DemoA demoA = new DemoA();
        int i = demoA.funtionA(3, 4);
        assertEquals(7, i);
    }

    public void testDemoAWithFunctionB(){
        DemoA demoA = new DemoA();
        int i = demoA.funtionB(3, 4);
        assertEquals(12, i);
    }
}

setUp() 在测试执行前需要做的一些代码操作可以在这个方法里边进行编写,例如初始化一些类或测试数据等。

tearDown() 在测试结束后,需要做一些操作可以在这个方法里边进行编写,例如一些测试数据的还原操作等。

test开头的方法即我们编写的测试case

运行测试

有了简单的测试代码,下面看如何运行测试。

Android Studio运行测试

1. 如单独运行某个测试类,打开DemoTest测试类直接点击运行即可

2. 如需要全部类执行,直接点击 

命令行运行测试

也可以通过命令行运行测试:

./gradlew connectedAndroidTest --info

生成报告位置如下 

覆盖率统计

单元测试覆盖率的统计可以使用JaCoCo插件。

build.gradle配置

在模块build.gradle中增加如下配置:

 

运行测试

./gradlew clean createDebugCoverageReport --info

覆盖率报告生成位置 

<path_to_your_project>\app\build\reports\coverage\debug\index.html

 

时间: 2024-10-25 16:54:01

Android Unit Tests的相关文章

Android最佳Mock单元测试方案:Junit + Mockito + Powermock

本文旨在从实践出发,引导开发者在Android项目中进行Mock单元测试. 什么是单元测试 单元测试由一组独立的测试构成,每个测试针对软件中的一个单独的程序单元.单元测试并非检查程序单元之间是否能够合作良好,而是检查单个程序单元行为是否正确. 为什么要进行单元测试 在敏捷开发大行其道的今天,由于时间紧,任务重,过分依赖测试工程师以及下列原因,导致单元测试不被重视,在开发流程中处于一个可有可无的尴尬境地. 1. 浪费的时间太多 1. 软件开发人员不应参与单元测试 1. 我是很棒的程序员,不需要进行

[android]android工程引用第三方jar提示找不到相关class的解决方法

使用第三方jar包  步骤:  方法1:Eclipse下, 右键工程, Build path, java build path,选择libraries 在右边的按钮中点击"Add Library" 选择"User library",点击"下一步" 点击"User librarys"按钮 在出现的界面中点击"New.."按钮 在弹出的界面中随便起一个名字,点击"确定" 点击"Ad

浅谈软件测试串的Android单元测试

如果想在android里面做单元测试,有两条基本的路子可行. 第一,就是java程序员最为熟悉和常用的JUnit, 但是由于目前android sdk (version 1.1)中只是提供了stubbed methods/classes,没有具体的实现代码,所以如果用JUnit的话,我们需要在运行单元测试时,一定要 用JDK来运行,利用java命令来启动JUnit的某个Runner.如果是用Eclipse的话,可以在Run Configuration里新建一个JUnit.但是一定要记得在Clas

【译】将 Android 项目迁移到 Kotlin 语言

本文讲的是[译]将 Android 项目迁移到 Kotlin 语言, 原文地址:Migrating an Android project to Kotlin 原文作者:Ben Weiss 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:wilsonandusa 校对者:phxnirvana, Zhiw 不久前我们开源了 Topeka,一个 Android 小测试程序. 这个程序是用 integration tests 和 unit tests 进行测试

Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

原文:Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航 经过前面的学习,Android Studio开发环境已准备OK,运行Android应用程序的原生模拟器和Genymotion模拟器都准备妥当.在之前简单讲过Eclipse中Android工程的项目结构和运行原理,那么本期就来一起来了解一下Android Studio的项目结构.     一.项目查看模式   前面在熟悉Android Studio界面中提到了Project项目工具窗口,一共支持10种查看模

[android]android自动化测试十之单元测试实例

android源代码中每个app下中都自带了一个test用例,下面主要介绍下camra单元测试用例  在AndroidManifest.xml中标明了测试用例instrumentation函数入口  Java代码 <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 The Android Open Source Project Licensed under the Apach

Android DevOps: From a Single Push Command to Production

Introduction DevOps refers to a set of well-known practices for automating software deliveries. By design, DevOps allows for easier maintenance and updating through continuous testing, code quality improvement, and feature development. One of the pri

Android Application Architecture 安卓APP架构[译]

序 本文介绍了文章作者从事了几年android应用的开发,经历2次架构变革,第一次集成了RxJava第二次集成了MVP,并将RxJava与MVP完美结合,实现了低耦合,代码简单,测试方便的架构. 其实我们在开发中也遇到过,Android入门门槛较低,如果前期对APP规划不清晰,Coder们对未来变化把握不准,技术架构经验不够强大,最终导致就是一个Activity几千行,里面写了大量的Private方法,拆成几个Fragment.封装出来几个类都是无法解决,结果就是看Activity难受的要死,纠

Android中JUnit测试的配置

第一步:首先在AndroidManifest.xml中加入下面代码: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="hb.learn.junit" android:versionCode="1" andr