Android 单元测试 (JUnit 套件,参数化,超时)

Android 开发 单元测试 (套件,参数化,超时)

参考文章: http://www.yiibai.com/junit/

1. 套件测试

概念 : 测试套件是指测试不同的测试类的用例,当测试类很多的时候,可以使用@RunWith和@Suite注解把需要运行的测试类用例在一起运行,

  • @RunWith : 这个是指定使用的单元测试默认执行类
  • @ Suite.SuiteClasses :定义测试类,将被列入执行,并按顺序执行

假设我们现在有两个测试类

SuiteTest1.java

/**
 * Created by TiaoPi on 2017/11/23.
 */

public class SuiteTest1 {

    @Test
    public void testAdd() throws Exception{
        JUnitTest jUnitTest = new JUnitTest();
        int testAdd = jUnitTest.testAdd(1, 2);
        assertEquals(3,testAdd);
//        assertEquals("测试得到的结果是不是" +testAddNum + 1 ,testAddNum + 6,testAdd);
    }

}

SuiteTest2.java

/**
 * Created by TiaoPi on 2017/11/23.
 */

public class SuiteTest2 {

    @Test
    public void testAdd2() throws Exception{
        JUnitTest jUnitTest = new JUnitTest();
        int testAdd = jUnitTest.testAdd(2, 2);
        assertEquals(4,testAdd);
    }

}

我们创建测试套件

SuiteTest.java

/**
 * Created by TiaoPi on 2017/11/23.
 */

@RunWith(Suite.class)
@Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class })
public class SuiteTest {


}

我们执行

a75b2146-3c1d-43c0-a099-9889a87122bc.png

2. 参数化测试

参数化测试: 参数化测试允许开发人员使用不同的值反复运行同一个测试

创建参数化测试的五个步骤

  • 用 @RunWith(Parameterized.class) 来注释 test 类。
  • 创建一个由 @Parameters 注释的公共的静态方法,它返回一个对象( java.util.Collection)的集合(数组)来作为测试数据集合。并在此方法中初始化所有需要测试的参数对.
  • 为每一列测试数据创建一个实例变量。
  • 为测试类声明一个带有参数的公共构造函数,并在其中声明的几个变量赋值。
  • 用实例变量作为测试数据的来源来创建你的测试用例。

按照步骤开始

假设我们现在有这样一个方法要测试

public Boolean parametersTest (int num){
        if (num % 2 == 0) {
            return true;
        }else {
            return false;
        }
    }

按照步骤开始写参数化测试

/**
 * Created by TiaoPi on 2017/11/23.
 */

//1.测试类指定特殊的运行器org.junit.runners.Parameterized
@RunWith(Parameterized.class)
public class ParameterizedTest {

    JUnitTest jUnitTest;

    // 2.为测试类声明几个变量,分别用于存放期望值和测试所用数据。
    int num;
    Boolean testResult;

    @Before
    public void setup() {
        jUnitTest = new JUnitTest();
    }

    //3.为测试类声明一个带有参数的公共构造函数,并为声明需要的几个变量赋值。
    public ParameterizedTest(int num,Boolean testResult){
        this.num = num;
        this.testResult = testResult;
    }

    //4.为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为
    // java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
    @Parameterized.Parameters
    public static Collection primeNumbers() {
        return Arrays.asList(new Object[][] {
                { 1, false },
                { 2, true },
                { 3, false },
                { 4, true },
                { 5, false }
        });
    }

    //5.编写测试方法,使用定义的变量作为参数进行测试
    @Test
    public void testResult () throws Exception{
        Log.d("执行测试" + num,num + " ----" + testResult);
        assertEquals(testResult,jUnitTest.parametersTest(num));
    }


}

测试通过

4bcc2dbb-cc82-401d-ae7d-3d1963a2a6fc.png

3.时间测试

Junit 提供了一个暂停的方便选项。如果一个测试用例比起指定的毫秒数花费了更多的时间,那么 Junit 将自动将它标记为失败。timeout 参数和 @Test 注释一起使用。

直接看代码

假设我们又这样一个方法需要测试

    public String timeTest(){
        try {
            Thread.sleep(5000);
            return "OK";
        } catch (InterruptedException e) {
            return "FAIL";
        }
    }

我们进行测试

    /**
     * 时间测试   超过一秒  直接失败
     */
    @Test(timeout = 1000)
    public void testTime() throws Exception {
        assertEquals("OK",jUnitTest.timeTest());
    }

执行会出现这样的错误

org.junit.runners.model.TestTimedOutException: test timed out after 1000 milliseconds

结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 简介 测试 在软件开发中是一个很重要的方面,良好的测试可以在很大程度决定一个应用的命运。软件测试中,主要有3大种类...
    Whyn阅读 5,813评论 0 2
  • 注意事项: 测试方法上必须使用@Test修饰 测试方法必须使用public void进行修饰,不能带任何参数 新建...
    鲁克巴克诗阅读 1,783评论 0 3
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,936评论 6 342
  • 偶尔可能会想一想你 嘴角的美人痣 风中你的飘飞的发丝 常常是在梦里 才能见到你 一千零一公里外的你 是否也会偶尔想...
    前面阅读 245评论 0 1