4.1 @無効

次に、JUnit フレームワークの非常に便利で人気のあるアノテーションをいくつか見てみましょう。最初のアノテーションを使用すると、JUnit が呼び出さないように特定のテストをオフにすることができます。これは、テストが正しく動作していないことに気付いた場合、またはコードを変更してテストが誤って中断した場合に必要になります。

前に書いたように、テストの 99% は誰にもサポートされていないため、遅かれ早かれすべて無効になることがわかります。したがって、この注釈は役立つもののリストの最初にあります。

彼女の例を考えてみましょう。

public class AppTest {

    @Disabled("Test is temporarily disabled. True, true")
    @Test
    void testOnDev(){
        System.setProperty("ENV", "DEV");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }

    @Test
    void testOnProd(){
     System.setProperty("ENV", "PROD");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }
}

上の例では、メソッドはtestOnDev()呼び出されません。ちなみに、アノテーションは@Disabledクラス宣言の直前に記述することができ、その場合はそのメソッドはすべて無視されます。

@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
    @Test
    void testOnDev(){
        System.setProperty("ENV", "DEV");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }

    @Test
    void testOnProd(){
     System.setProperty("ENV", "PROD");
        Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
    }
}

4.2 @ネスト

JUnit を使用すると、ネストされたクラスでテスト メソッドを呼び出すことができます。つまり、ネストされたテストクラスです。頻繁に遭遇するというわけではありませんが、その可能性はあるので、それが何なのかを理解しておく必要があります。

ネストされたクラスのメソッドを宣言前に呼び出すには、 アノテーション を記述する必要があります@Nested。例:

public class AppTest {
    @Nested
    public class DevStagingEnvironment {
    @Test
        void testOnDev(){
            System.setProperty("ENV", "DEV");
            Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
        }
   }

    @Nested
    public class ProductionEnvironment {
        @Test
        void testOnProd(){
           System.setProperty("ENV", "PROD");
           Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
        }
   }
}

詳細については、公式ドキュメントを参照してください。

4.3 @ExtendWith

もう 1 つの便利な注釈は です@ExtendWith。おそらくあなたは彼女に頻繁に会うでしょう、それで彼女をもっと詳しく見てみましょう。

JUnit は、作業を柔軟にカスタマイズするためのさまざまなプラグイン (拡張機能) を作成できる強力なフレームワークです。拡張機能の中には、テストに関する統計を収集できるもの、メモリ内のファイル システムをエミュレートできるもの、Web サーバー内での動作をエミュレートできるものなどがあります。

コードがフレームワーク (Spring など) 内で実行されている場合、ほとんどの場合、このフレームワークがコード内のオブジェクトの作成と構成を管理します。したがって、特別なテストプラグインが不可欠です。例:

例 1.拡張機能は、正しく動作するために、WebServerExtension呼び出されたテスト メソッドに渡されます。URL

@Test
@ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
    WebClient webClient = new WebClient();
    // Use WebClient to connect to web server using serverUrl and verify response
    assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}

これは、通常、Spring フレームワークで動作するコードのテストを開始する方法です。

@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {

    @MockBean
    TestService service;

    @Test
    void test() {
        assertNotNull(service); // Test succeeds
    }
}

SpringExtensionSpring フレームワークのテスト バージョンを作成しますが、MockitoExtention偽のオブジェクトを作成することもできます。偽のオブジェクトは非常に興味深いトピックです。必ず触れますが、少し後になります。

4.4 @タイムアウト

小さくて興味深い注釈を付けてこの講義を終えましょう@Timeout。テストを実行する時間を設定できます。テストに注釈で指定された時間よりも長い時間がかかった場合、テストは失敗したとみなされます。

class TimeoutDemo {
    @Test
    @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
    void failsIfExecutionTimeExceeds100Milliseconds() {
        // test will fail if it takes more than 100 milliseconds
    }
}

これで講義は終了です。