我正在使用JUnit进行广泛测试,有时候 - 在调试我的代码时 - 我希望(临时)只运行我的@Test
测试类的@RunWith(Arquillian.class)
个@Ignore
。目前我正在为所有其他测试添加@IgnoreOther
,并想知道{{1}}之类的内容是否确实存在。
是否有更好的解决方案可以忽略所有其他测试?
答案 0 :(得分:8)
只是我的两分钱。您可以尝试使用Junit Rules作为@srkavin建议。
这是一个例子。
package org.foo.bar;
import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;
public class SingleTestRule implements MethodRule {
private String applyMethod;
public SingleTestRule(String applyMethod) {
this.applyMethod = applyMethod;
}
@Override
public Statement apply(final Statement statement, final FrameworkMethod method, final Object target) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
if (applyMethod.equals(method.getName())) {
statement.evaluate();
}
}
};
}
}
package org.foo.bar;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
public class IgnoreAllTest {
@Rule
public SingleTestRule test = new SingleTestRule("test1");
@Test
public void test1() throws Exception {
System.out.println("test1");
}
@Test
public void test2() throws Exception {
Assert.fail("test2");
}
@Test
public void test3() throws Exception {
Assert.fail("test3");
}
}
答案 1 :(得分:5)
最简单的方法是将所有@Test
替换为//###$$$@Test
。然后,当您的调试完成后,将//###$$$@Test
替换为@Test
。
此外,IDE通常只允许运行一个测试。例如,在Eclipse中,您可以在Outline视图中执行此操作。
答案 2 :(得分:5)
Test rules(JUnit 4.7+)会有所帮助。例如,您可以编写ignores all @Test methods except one with a specific name。
的规则答案 3 :(得分:4)
来自srkavin(和mijer)的答案是正确的,但代码是从JUnit 4.9弃用的。接口和方法签名已更改。我想为对这个问题感兴趣的其他人提供这个。
public class IgnoreOtherRule implements TestRule
{
private String applyMethod;
public IgnoreOtherRule(String applyMethod){
this.applyMethod = applyMethod;
}
@Override
public Statement apply(final Statement statement, final Description description)
{
return new Statement()
{
@Override
public void evaluate() throws Throwable {
if (applyMethod.equals(description.getMethodName())) {
statement.evaluate();
}
}
};
}
}