1. 概要

このチュートリアルでは、JUnit4の基本テストクラスからのテストの実行をスキップするための可能な解決策について説明します。 このチュートリアルでは、基本クラスにはヘルパーメソッドしかありませんが、子クラスはそれを拡張して実際のテストを実行します

2. 基本テストクラスをバイパスする

BaseUnitTestクラスといくつかのヘルパーメソッドがあると仮定します。

public class BaseUnitTest {
    public void helperMethod() {
        // ...
    }
}

それでは、テストを含むクラスで拡張してみましょう。

public class ExtendedBaseUnitTest extends BaseUnitTest {
    @Test
    public void whenDoTest_thenAssert() {
        // ...        
    }
}

IDEまたはMavenビルドのいずれかを使用してテストを実行すると、 BaseUnitTestに実行可能なテストメソッドがないことを示すエラーが表示される場合があります。このクラスでテストを実行したくないので、このエラーを回避する方法を探しています。

3つの異なる可能性を見ていきます。 IDEでテストを実行する場合、IDEのプラグインと、JUnitテストを実行するように構成する方法によって、異なる結果が得られる可能性があります。

2.1. クラスの名前を変更

クラスの名前を、ビルド規則でテストとしての実行から除外される名前に変更できます。 たとえば、Mavenを使用している場合、MavenSurefireプラグインのデフォルトを確認できます。

名前をBaseUnitTestからBaseUnitTestHelperまたは同様のものに変更できます

public class BaseUnitTestHelper {
    public void helperMethod() {
        // ...
    }
}

2.2. 無視

2番目のオプションは JUnit@Ignoreアノテーションを使用してテストを一時的に無効にします。 クラスレベルで追加して、クラス内のすべてのテストを無効にすることができます

@Ignore("Class not ready for tests")
public class IgnoreClassUnitTest {
    @Test
    public void whenDoTest_thenAssert() {
        // ...
    }
}

同様に、メソッドレベルで追加できます。クラス内で他のテストを実行する必要があるが、1つまたはいくつかを除外する場合に備えて:

public class IgnoreMethodTest {
    @Ignore("This method not ready yet")
    @Test
    public void whenMethodIsIgnored_thenTestsDoNotRun() {
        // ...
    }
}

Mavenで実行している場合、次のような出力が表示されます。

Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.041 s - in com.baeldung.IgnoreMethodTest

JUnit 5 以降、@Disabledアノテーションは@Ignoreに置き換わります。

2.3. 基本クラスをabstractにします

おそらく 最善のアプローチは、基本テストクラスabstractを作成することです。。 抽象化には、それを拡張するための具体的なクラスが必要になります。 そのため、JUnitはそれをテストインスタンスとは見なしません。

BaseUnitTestクラスを抽象化してみましょう。

public abstract class BaseUnitTest {
    public void helperMethod() {
        // ...
    }
}

3. 結論

記事上で、 JUnit4でのテストの実行から基本テストクラスを除外する例をいくつか見てきました。。 最良のアプローチは、抽象クラスを作成することです。

JUnitの@Ignoreアノテーションも広く使用されていますが、これは悪い習慣と見なされています。 テストを無視することで、テストと無視の理由を忘れてしまう可能性があります.

いつものように、この記事で紹介するコードは、GitHubから入手できます。