JUnit 4.11 테스트 세트에 대해서는 일부 단위 테스트에 적용 할 자체 주석 (@MyTest
)을 작성했습니다. 그것이 의미하는 최상의 솔루션이 아닌 @Test
과 @MyTest
으로이 테스트에 주석을 달아야합니다. 특수 효과를 사용하여 상속을 구현할 수 없으므로 맞춤 러너를 만들려고했지만 지금까지 성공하지 못했습니다.JUnit에 대한 @Test 주석을 직접 작성하십시오.
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 { }
'@ Retention' 주석 ... 너무 단순하지만 잊어 버린 것이 하나 있습니다. 'computeTestMethods()'를 바꾸는 것도 좋은 지적이다.'JUnit4Builder'와 내 자신의 빌더를 가지고 있으면 작업을 할 수는 있지만 실제로는 그렇지 않을 것이라고 생각했다. 어쨌든 감사합니다! :-) – blalasaadri