@MyTestJUnit 4.11 テストのセットに対して、いくつかの単体テストに適用する独自の注釈 (と呼びましょう) を作成しました。現状では、これらのテストに と の両方で注釈を付ける必要が@Testあります@MyTest- 私が考える最良の解決策ではありません。注釈では継承ができないため、カスタムランナーを構築しようとしましたが、これまでのところ成功していません。これまでの様子は次のとおりです。
public class MyRunner extends Suite {
    public MyRunner(Class<?> klass, RunnerBuilder builder)
            throws InitializationError {
        super(klass, modifyBuilder(builder));
    }
    private static final RunnerBuilder modifyBuilder(RunnerBuilder builder) {
        if(AllDefaultPossibilitiesBuilder.class.isAssignableFrom(builder.getClass())) {    
            return new AllDefaultPossibilitiesBuilder(true) {
                @Override
                public Runner runnerForClass(Class<?> testClass)
                        throws Throwable {
                    List<RunnerBuilder> builders = Arrays.asList(
                            ignoredBuilder(),
                            annotatedBuilder(),
                            suiteMethodBuilder(),
                            junit3Builder(),
                            junit4Builder(),
                            myTestBuilder());
                    for (RunnerBuilder each : builders) {
                        Runner runner = each.safeRunnerForClass(testClass);
                        if (runner != null) {
                            return runner;
                        }
                    }
                    return null;
                }
                private RunnerBuilder myTestBuilder() {
                    return new RunnerBuilder() {
                        @Override
                        public MyAnnotationRunner runnerForClass(Class<?> testClass)
                                throws Throwable {
                            return new MyAnnotationRunner(testClass);
                        }
                    };
                }
            };
        } else {
            return builder;
        }
    }
}
そしてMyAnnotationRunnerクラス:
public class MyAnnotationRunner extends BlockJUnit4ClassRunner {
    public MyAnnotationRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }
    @Override
    protected List<FrameworkMethod> computeTestMethods() {
        return getTestClass().getAnnotatedMethods(MyTest.class);
    }
    @Override
    protected void validateTestMethods(List<Throwable> errors) {
        validatePublicVoidNoArgMethods(MyTest.class, false, errors);
    }
}
@MyTestただし、これまでのところ、テストを実行すると、注釈は気にしません。実際、ビルダーリストの行をコメントアウトすると、junit4Builder(),テストはまったく実行されません。
私は間違った方向に進んでいますか、それともこれは正しい考えですが、これまでのところ不完全ですか? (そして、誰かがそれを提案したい場合に備えて、TestNG または別のテスト フレームワークに切り替えることはできません。)
編集:
解決策 (Bobbo によって提案された) は、上記のコードにはありませんでした - それはすべて正しいようです。@MyTestただし、注釈には注釈がありませんでした@Retention。正しい定義は次のようになります。
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest { }