目次
1.2.2.2 @Suite.SuiteClasses(...{xx.class, xx.class, ...})
1.2.3.1 @RunWith(Parameterized.class)
1.2.4 ユースケースの実行順序の制御に関するアノテーション
1.2.5.2 JUnit は次のルール実装を提供します。必要に応じてルールを自分で実装することもできます
1.0 序文
先ほどホワイト ボックス テスト方法を紹介しましたが、後で Eclipse を使用した Junit 4 を紹介します (IDEA を使用している場合は撤回できます)
1.1 Junit 4の構成
1.1.1 インストールパッケージ
3 つの jar パッケージが必要です。
- org.junit_4.13.2.v20211018-1956.jar
- org.hamcrest.core_1.3.0.v20180420-1519.jar
- org.hamcrest-library-1.3.jar
org.junit_4.13.2.v20211018-1956.jar と org.hamcrest.core_1.3.0.v20180420-1519.jar は、Eclipse に付属する 2 つの jar パッケージです
次に、org.hamcrest-library-1.3.jar が必要になります。
1.1.2 Junitプロジェクトの作成
「新規」>>「新規」>>「プロジェクト」をクリックします。
「Java プロジェクト」を選択し、「次へ」をクリックします。
プロジェクト名を入力し、「jre」を選択して、「次へ」をクリックします。
[ライブラリ] >> [クラスパス] >> [外部 JAR の追加] を選択します。
前に 3 つの jar パッケージを選択し、通常は eclipsed の plugins ディレクトリに配置されます。org.hamcrest-library-1.3.jar はダウンロードしたディレクトリにあります (ダウンロードした jar パッケージをここにドロップすることもできます)。「完了」をクリックします。
junit コードを保存するための新しいフォルダーを作成します
新しいプロジェクトを作成する
Demo.java コードを記述します。
public class Demo {
public int add (int a, int b) {
return a + b;
}
public int div (int a, int b) {
return a / b;
}
}
プロジェクトを右クリックします。新しいプロジェクトです。ここには junit がありません。他のプロジェクトで探しましょう。
junit の Java で、「テスト ケース」を選択し、「次へ」をクリックします。
junit4 を選択し、先ほど作成した junit フォルダーのディレクトリを選択して、「完了」を選択します。
DemoTest.java にコードを入力します。
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class DemoTest {
Demo demo;
@Before
public void setUp() throws Exception {
demo = new Demo();
}
@After
public void tearDown() throws Exception {
demo = null;
}
@Test
public void testAdd() {
// 实例化一个类
Demo demo = new Demo();
// 期望值
int expetected = 2;
// 真实值
int trueValue = demo.add(1, 1);
// 断言方法
assertEquals(expetected, trueValue);
}
@Test
public void testDiv() {
// 实例化一个类
Demo demo = new Demo();
// 期望值
int expetected = 2;
// 真实值
int trueValue = demo.div(2, 1);
// 断言方法
assertEquals(expetected, trueValue);
}
}
走る
1.2 Junit 4 アノテーション
1.2.1 テストケースに関するアノテーション
1.2.1.1 @前
public void setUp() throws Exception {
// 初始化所需的资源
}
初期化が必要なリソースを初期化するために各テスト メソッドの前に実行されます。
1.2.1.2 @後
@After
public void tearDown() throws Exception {
// 关闭资源
}
各テスト メソッドの後に実行され、初期化が必要なリソースが閉じられます。
1.2.1.3 @BeforeClass
@BeforeClass
public static void setup() throws Exception {
// 初始化资源
}
すべてのメソッドが実行される前に実行され、通常はデータベース接続を開くなど、計算量の多いタスクを実行するために使用されます。@BeforeClass アノテーションが付けられたメソッドは静的 (つまり、静的型) である必要があります。
1.2.1.4 @アフタークラス
@AfterClass
public static void tearDown() throws Exception {
// 关闭资源
}
すべてのメソッドが実行された後に実行され、通常はデータベース接続を閉じるなどのタスクを実行するために使用されます。@AfterClass アノテーションが付けられたメソッドは静的 (つまり、静的型) である必要があります。
1.2.1.5 @テスト
@Test
public void test01() {
// 测试,断言等
}
実際のテスト コードが含まれており、テスト対象のメソッドとして Junit によって使用されます。
@Test アノテーションには 2 つのオプションのパラメータがあります。
- Expected は、テスト メソッドの実行後にスローされる例外を示します (値は例外名です)。
- タイムアウトはテストメソッドの実行時間を検出します
1.2.1.6 @無視
テスト メソッドまたはクラスをコメント アウトすると、アノテーションが付けられたメソッドまたはクラスは実行されません。
注: JUnite4 の実行順序: @BeforeClass > @Before > @Test1 > @After > @Before > @Test2 > @After ... > @AfterClass
1.2.1.7 例
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class DemoTest {
@BeforeClass
public static void setup() throws Exception {
// 这里初始化资源(如连接数据库)
}
@AfterClass
public static void tearDown() throws Exception {
// 关闭资源()
}
@Before
public void setUp() throws Exception {
System.out.println("SetUp.....");
// 这里初始化我们所需要的资源
}
@After
public void tearDown() throws Exception {
System.out.println("Gone.....");
// 这里关闭我们的资源
}
@Test
public void test01() {
// 测试1
}
@Ignore
@Test
public void test02() {
// 测试2
}
}
1.2.2 スイートのパッケージ化とテストに関連する注釈
1.2.2.1 @RunWith(Suite.class)
特別な Runner が必要なため、パラメータ Suite.calss を @RunWith アノテーションに渡す必要があります。
1.2.2.2 @Suite.SuiteClasses(...{xx.class, xx.class, ...})
これは、このクラスがパッケージ化されたテスト クラスであることを示すために使用されます。パッケージ化するクラスをパラメータとしてアノテーションに渡すだけです。
1.2.2.3 例
これら 2 つのアノテーションにより、すべての意味が完全に表現されているため、次のクラスは無関係です。クラス名を選択するだけで、コンテンツは空です。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
public class DemoTest {
@RunWith(Suite.class)
@SuiteClasses({Demo01.class, Demo02.class, Demo03.class})
public class AllTests {
}
}
1.2.3 パラメータ化されたテストに関連する注釈
1.2.3.1 @RunWith(Parameterized.class)
まず、この種のテスト専用に新しいクラスを生成する必要があり、同じクラスを他のテストと共有することはできません。
ここではデフォルトのランナーは使用されず、パラメーター化機能を備えたランナーが使用されます。
ステートメント @RunWith(Parameterized.class) は、このクラスの ParameterizedRunner を指定します。
これは背後の@Parametersと組み合わせて使用する必要があります
1.2.3.2 @パラメータ
方法について。
テストするクラスを定義し、パラメータを格納する変数と期待される結果を格納する変数の 2 つの変数を定義します。
テストデータを定義する組み合わせは、以下の prepareData() メソッドです。このメソッドの名前は任意ですが、 @Parameters アノテーションを使用して変更する必要があります。
ここで注意すべき点は、その中のデータは 2 次元配列であり、データは 2 つのグループに分かれており、各グループ内の 2 つのデータ、1 つはパラメータ、もう 1 つは期待される結果です。たとえば、最初のグループ {2, 4} では、2 がパラメータで、4 が期待される結果です。これら 2 つのデータの順序は重要ではありません。
次に、コンストラクターがあり、その機能は、以前に定義された 2 つのパラメーターを初期化することです。ここでのパラメータの順序に注意してください。これは、上記のデータ収集の順序と一致している必要があります。(たとえば、すべてのパラメータの後に結果が続きます)
ここでも次の例を見てみましょう
1.2.3.3 例
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class FibonacciTest {
@Parameters(name = "{index}: fib({0})={1}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
});
}
private int input;
private int expected;
public FibonacciTest(int input, int expected) {
this.input = input;
this.expected = expected;
}
@Test
public void test() {
assertEquals(expected, Fibonacci.compute(input));
}
}
1.2.4 ユースケースの実行順序の制御に関するアノテーション
1.2.4.1 @FixMethodOrder
テストメソッドの実行順序を制御します。
このアノテーションのパラメータは org.junit.runners.MethodSorters オブジェクトです。
列挙型クラス org.junit.runners.MethodSorters は、次の 3 つの順序タイプを定義します。
MethodSorters.JVM : JVM によって取得されたメソッドの順序、つまりコード内で定義されたメソッドの順序に従います。
MethodSorters.DEFAULT : デフォルトの順序。決定的ではあるが予測できない順序で実行されます。
MethodSorters.NAME_ASCENDING : メソッド名のアルファベット順に実行します。
1.2.5 カスタムルールルールに関するアノテーション
1.2.5.1 @Rule と @ClassRule
-
ルールの実装とは
Rule は、TestRule インターフェイスを実装する共有クラスのセットであり、検証、TestCase の監視、外部リソース管理などの機能を提供します。
つまり、テスト ケースの実行中にいくつかの共通関数を共有できるため、同様の関数を持つコードを繰り返し記述する必要がなくなります。
-
JUnit4 には @Rule と @ClassRule という 2 つのアノテーションが含まれています
フィールドを変更するかルールを返すメソッド。
2 つのスコープは異なります。
- @Rule のスコープはテスト メソッドです。
- @ClassRule はテスト クラスです。
1.2.5.2 JUnit は次のルール実装を提供します。必要に応じてルールを自分で実装することもできます
-
検証者: テスト実行結果の正確性を検証します。
-
ErrorCollector: テスト メソッドで発生したエラー情報を収集します。テストは中断されません。エラーがあった場合、テスト終了後に失敗としてマークされます。
-
ExpectedException: 柔軟な例外検証機能を提供します。
-
タイムアウト: タイムアウトをテストするためのルール。
-
外部リソース: 外部リソース管理。
-
TemporaryFolder: JUnit のテスト実行の前後に、新しい一時ディレクトリを作成および削除します。
-
TestWatcher: テスト メソッドのライフサイクルのさまざまな段階を監視します。
-
TestName: テスト メソッドの実行中にテスト名を取得する機能を提供します。
最後に、私の記事を注意深く読んでくださった皆さんに感謝します。ファンの成長と注目をずっと見ていると、互恵性が常に必要とされます。それはそれほど価値のあるものではありませんが、もしそれがあれば、それを奪うことができますあなたにはそれが必要です:
これらの資料は、[ソフトウェア テスト] の友人にとって最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。あなたにも役立つことを願っています。
私の QQ 技術交換グループ (技術交換とリソース共有、広告なし)
以上がこのセクションの全内容です。間違いがある場合は、修正してください。