JUnit学习笔记(2)----テストランナー(test runner) テスト実行方法の制御

1. コマンドラインからのJUnitの実行

  • JUnitによるユニットテストをコマンドラインからじっこするには、org.junit.runner.JUnitCoreクラスを使用します。
    例えば、テストクラスSomeTestをコマンドラインから実行するには次のコマンドを入力します。
$ java org.junit.runner.JUnitCore test.SomeTest

2. JUnitCoreクラスの仕組み

  • JUnitによるユニットテストが、次の流れで行われている。
    a. テストケースの収集
    b.テストの実行
    c.テスト結果の出力
  • テストランナーとは?
    JUnitでは、このようなテストの実行に関するカスタマイズ要求を満たすために、テストランナーという仕組みを提供しています。テストランナーは、主にテストクラスに定義されたテストケースの実行に関する制御を行います。

  • テストランナーの設定
    テストランナーはテストクラスごとに設定します。テストランナーを指定するには、テストクラスにorg.junit.runner.RunWithアノテーションを付与し、値としてテストランナーをなるクラスを指定します。
    ps:看日文有点没看明白,中文的解释大概就是:当一个类被注解为@RunWith, JUnit 将调用被在其中注解,以便运行测试类,而不使用内置的 JUnit 运行方法。

@RunWith(JUnit4.class)
public class SomeTest{
}

3. Suite—-複数のテストクラスをまとめて実行する

  • org.junit.runners.Suiteクラスは、複数のテストクラスを束ねてテストを実行するテストランナーです。
  • 例如:
    FirstDaySchool是待测类
    待测类中有两个方法,一个是PrepareMyBag方法,一个是AddPen方法。参数用LinkedList。
    这是待测类FirstDaySchool()
package org.java.user;

import java.util.LinkedList;
import java.util.List;

public class FirstDaySchool {
    List<String> a = new LinkedList<String>();
    public List<String> PrepareMyBag(){
        a.add("Book");
        a.add("Student card");
        return a;
    }

    public List<String> AddPen(){
        a.add("Book");
        a.add("Student card");
        a.add("Pen");
        return a;
    }
}

测试类PrepareMyBagTest()

package org.java.user;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.junit.Assert.assertThat;

import java.util.List;

import org.junit.Test;

public class PrepareMyBagTest {

    @Test
    public void testPrepareMyBag() {
        FirstDaySchool school = new FirstDaySchool();

        //System.out.println("Inside testPrepareMyBag()");
        List<String> actual = school.PrepareMyBag();
        assertThat(actual, hasItems("Student card","Book"));

    }
}

测试类AddPen()

package org.java.user;

import static org.hamcrest.Matchers.hasItems;
import static org.junit.Assert.*;

import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

public class AddPenTest {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
    }

    @Test
    public void test() {
        FirstDaySchool school = new FirstDaySchool();

        //System.out.println("Inside testAddPen()");
        List<String> actual = school.AddPen();
        assertThat(actual, hasItems("Book","Student card","Pen"));
    }

}

test suite类

import org.java.user.AddPenTest;
import org.java.user.PrepareMyBagTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({PrepareMyBagTest.class,AddPenTest.class})
public class AllTests {

}

最后的输出结果如图
这里写图片描述

去掉代码注释得到如下输出
Inside testPrepareMyBag()
Inside testAddPen()

改写suite类中的第八行代码

@SuiteClasses({AddPenTest.class,PrepareMyBagTest.class})

得到输出相反,证明调用顺序就是SuiteClasses中写的顺序

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值