我发现完全具有这种行为并将它们作为报告中的意识跳过测试的最佳方法是使用您自己的跑步者(如在 AlexR 的答案中)但覆盖 runChild 方法,该方法允许选择测试但像处理忽略而不是完全排除。
要使用的注解
@Retention(RetentionPolicy.RUNTIME)
public @interface TargetOS {
String family();
String name() default "";
String arch() default "";
String version() default "";
}
JUnit 跑步者
public class OSSensitiveRunner extends BlockJUnit4ClassRunner {
public OSSensitiveRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
Description description = describeChild(method);
if (method.getAnnotation(Ignore.class) != null) {
notifier.fireTestIgnored(description);
} else if (method.getAnnotation(TargetOS.class) != null) {
final TargetOS tos = method.getAnnotation(TargetOS.class);
String name = tos.name().equals("") ? null : tos.name();
String arch = tos.arch().equals("") ? null : tos.arch();
String version = tos.version().equals("") ? null : tos.version();
if (OS.isOs(tos.family(), name, arch, version)) {
runLeaf(methodBlock(method), description, notifier);
} else {
notifier.fireTestIgnored(description);
}
} else {
runLeaf(methodBlock(method), description, notifier);
}
}
}
测试中的使用
@RunWith(OSSensitiveRunner.class)
public class SeleniumDownloadHelperTest {
...
并限制特定方法
@Test
@TargetOS(family = "windows")
public void testGetFileFromUrlInternetExplorer() throws Exception {
...
}