我的应用程序有几种执行模式,在1模式下,我的一些测试会抛出一个具体的异常是正常的 . 我需要使用像@SkipOnFail这样的方法来注释这个方法,如果抛出异常,它会将方法设置为跳过 .
提前致谢!
@Edit(我的问题要更清楚)
@Test(expected=ConcreteException.class)
对我不起作用,因为即使没有抛出ConcreteException.class,我也需要传递测试(如果不抛出此异常,junit中的预期标记会将我的测试标记为失败),否则将被跳过 . 在所有其他情况下,它应该一如既往地工作 .
@Solution对我有用(junit v4.7)thx到@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);
}
}
};
}
};
@谢谢
3 回答
我不认为这样的功能是开箱即用的,但使用custom TestRule和Assume应该很容易实现,如下所示:
怎么用JUnit Extensions?
以下示例取自Tutorial .
它为先决条件(@Prerequisite)提供了附加注释:忽略基于条件的测试 .
所需的方法是在运行测试期间检查这一点 . 所以你可以简单地添加一个
@Prerequisite(requires="")
注释 .使用
@Prerequisite(requires = "databaseIsAvailable")
指定的方法必须是公共方法,返回布尔值或布尔值 .如果将这些方法合并到辅助类中,您还可以使用
@Prerequisite(requires = "databaseIsAvailable", callee="DBHelper")
指定要调用的类中的静态方法 .我搜索了关于JUnit的文档,看起来从版本4.9开始他们引入了他们称之为测试规则的东西(参见TestRule) . 你可以从这开始 .
标记为
@Rule
的ExpectedException类可以提供一些帮助,以便检查抛出的异常但不是强制要求传递的测试 .对于更高级的用法,我暂时不能说,因为我刚刚发现它 .