1

JUnit では、次のようにテスト スイートを作成できます。

public class SecurityTest1 {
    @Test
    public void testSecurity1() {
        // ...
    }
}

public class LoadTest1 {
    @Test
    public void testLoad1() {
        // ...
    }
}

public class SecurityTest2 {
    @Test
    public void testSecurity2() {
        // ...
    }
}

@RunWith(Suite.class)
@SuiteClasses({SecurityTest1.class, SecurityTest2.class})
public class SecurityTestSuite {}

しかし、これはかなり面倒なようです。簡単なクラス レベルの注釈を定義すると、とても便利です。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SecurityTest {} 

次に、スイートを次のように定義します。

@SecurityTest
public class SecurityTest1 {
    @Test
    public void testSecurity1() {
        // ...
    }
}

public class LoadTest1 {
    @Test
    public void testLoad1() {
        // ...
    }
}

@SecurityTest
public class SecurityTest2 {
    @Test
    public void testSecurity2() {
        // ...
    }
}

@RunWith(Suite.class)
@SuiteClasses({SecurityTest.class})
public class SecurityTestSuite {}

これは可能ですか?もしそうなら、どのように?:JUnitがこれをサポートしていない場合、TestNGまたは他のテストフレームワークに切り替えることに興味はありません...事前に感謝します!

4

1 に答える 1

1

スイートランナーに似た独自のテスト ランナーを実装することで、これを行うことができます。

このランナーは、アノテーションの値からマーカー アノテーション クラスを抽出する必要があり@SuiteClassesます (おそらく@SuiteClasses独自のアノテーションに置き換える必要があります)。クラスのgetAnnotatedClassesメソッドを見てみましょう。 マーカー アノテーション クラスを取得したら、このアノテーションでマークされたテスト クラスのクラスパスをスキャンし ( Reflectionsなどのライブラリを使用)、それらの配列を適切な Runner コンストラクターに渡す必要があります。コンストラクター でも同様の動作を見つけることができます。org.junit.runners.Suite

Suite

public Suite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
   this(builder, klass, getAnnotatedClasses(klass));
} 
于 2013-09-12T20:24:03.673 に答える