[単体テスト] Junit 4 (2) --eclipse 構成 Junit+Junit 基本アノテーション

目次

1.0 序文

1.1 Junit 4の構成

1.1.1 インストールパッケージ

1.1.2 Junitプロジェクトの作成

1.2 Junit 4 アノテーション

1.2.1 テストケースに関するアノテーション

1.2.1.1 @前

1.2.1.2 @後

1.2.1.3 @BeforeClass

1.2.1.4 @アフタークラス

1.2.1.5 @テスト

1.2.1.6 @無視

1.2.1.7 例

1.2.2 スイートのパッケージ化とテストに関連する注釈

1.2.2.1 @RunWith(Suite.class)

1.2.2.2 @Suite.SuiteClasses(...{xx.class, xx.class, ...})

1.2.2.3 例

1.2.3 パラメータ化されたテストに関連する注釈

1.2.3.1 @RunWith(Parameterized.class)

1.2.3.2 @パラメータ

1.2.3.3 例

1.2.4 ユースケースの実行順序の制御に関するアノテーション

1.2.4.1 @FixMethodOrder

1.2.5 カスタムルールルールに関するアノテーション

1.2.5.1 @Rule と @ClassRule

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

  1. ルールの実装とは

    Rule は、TestRule インターフェイスを実装する共有クラスのセットであり、検証、TestCase の監視、外部リソース管理などの機能を提供します。

    つまり、テスト ケースの実行中にいくつかの共通関数を共有できるため、同様の関数を持つコードを繰り返し記述する必要がなくなります。

  2. JUnit4 には @Rule と @ClassRule という 2 つのアノテーションが含まれています

    フィールドを変更するかルールを返すメソッド。

2 つのスコープは異なります。

  • @Rule のスコープはテスト メソッドです。
  • @ClassRule はテスト クラスです。

1.2.5.2  JUnit は次のルール実装を提供します。必要に応じてルールを自分で実装することもできます

  • 検証者: テスト実行結果の正確性を検証します。

  • ErrorCollector: テスト メソッドで発生したエラー情報を収集します。テストは中断されません。エラーがあった場合、テスト終了後に失敗としてマークされます。

  • ExpectedException: 柔軟な例外検証機能を提供します。

  • タイムアウト: タイムアウトをテストするためのルール。

  • 外部リソース: 外部リソース管理。

  • TemporaryFolder: JUnit のテスト実行の前後に、新しい一時ディレクトリを作成および削除します。

  • TestWatcher: テスト メソッドのライフサイクルのさまざまな段階を監視します。

  • TestName: テスト メソッドの実行中にテスト名を取得する機能を提供します。


最後に、私の記事を注意深く読んでくださった皆さんに感謝します。ファンの成長と注目をずっと見ていると、互恵性が常に必要とされます。それはそれほど価値のあるものではありませんが、もしそれがあれば、それを奪うことができますあなたにはそれが必要です

これらの資料は、[ソフトウェア テスト] の友人にとって最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。あなたにも役立つことを願っています。

私の QQ 技術交換グループ (技術交換とリソース共有、広告なし)


以上がこのセクションの全内容です。間違いがある場合は、修正してください。

おすすめ

転載: blog.csdn.net/weixin_67553250/article/details/131400478