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中写的顺序