【发布时间】:2012-05-29 17:40:17
【问题描述】:
我的应用程序有几种执行模式,在一种模式下,我的一些测试会抛出一个具体的异常是正常的。我需要用 @SkipOnFail 之类的东西来注释这些方法,如果抛出异常,它会将方法设置为已跳过。
提前致谢!
@Edit(让我的问题更清楚)
@Test(expected=ConcreteException.class)
对我不起作用,因为即使未抛出 ConcreteException.class,我也需要通过测试(如果不抛出此异常,junit 中的预期标记会将我的测试标记为失败),否则将被跳过。在所有其他情况下,它应该像往常一样工作。
对我有用的@Solution(junit v4.7)感谢@axtavt
@Rule
public MethodRule skipRule = new MethodRule() {
public Statement apply(final Statement base, FrameworkMethod method, Object target) {
if(method.getAnnotation(SkipOnFail.class) == null) return base;
return new Statement() {
@Override
public void evaluate() throws Throwable {
try{
base.evaluate();
} catch (ConcreteException e) {
Assume.assumeTrue(false);
}
}
};
}
};
@Thx
【问题讨论】:
-
为什么不用
@ExpectedjUnit注解呢? -
我无法为@Test 方法设置预期的注释属性,因为根据junit javadoc,如果方法没有抛出异常或者如果它抛出与声明的异常不同的异常,则测试失败。但如果没有抛出异常,我需要我的方法成功,如果抛出具体异常,我需要跳过。
-
你的意思是跳过测试?是被某种方式忽略了还是只是默默地通过了?
-
为什么不使用带有具体异常的 try catch 块?