我的所有测试都有班长:
import org.junit.*;
import org.junit.rules.TestName;
import org.junit.rules.TestRule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.junit.runner.Result;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
@RunWith(Suite.class)
@Suite.SuiteClasses({
Test1.class,
Test2.class,
Test3.class,
Test4.class,
Test5.class
})
public class AllTestRunner {
...
@Before
public void method1() {}
@After
public void method2() {}
我需要为来自method1()
的每个班级中的每个method2()
投放@Test
和SuiteClasses
。
但它不起作用,可能是我做的。错?
感谢您的帮助,对不起我的英语。
答案 0 :(得分:1)
首先,创建一个抽象类BasicTest:
//
@Rule
public TestWatcher watcher = new TestWatcher() {
@Override
protected void starting(Description description) {
}
@Override
protected void succeeded(Description description) {
}
@Override
protected void failed(Throwable e, Description description) {
}
@Override
protected void skipped(AssumptionViolatedException e, Description description) {
}
@Override
public void finished(Description description) {
}
};
//...
对于每个测试类:
public class Test extends BasicTest { }
因此,每个@Test将被称为TestWatcher的方法。
答案 1 :(得分:0)
这是因为@Before
,@After
,@BeforeClass
和@AfterClass
是依赖于类的。换句话说,它们只涉及它们所定义的类别。
对不起,没有办法实现您尝试使用这些注释实现的目标。您必须在每个SuiteClasses中复制您的方法
答案 2 :(得分:0)
或者,您可以使用规则。此方法的优势在于您不需要继承某个类。
在一个类中,您实现了一个规则,该规则指定在测试用例执行之前和之后要执行的行为。
public class MyRule implements MethodRule {
public Statement apply(final Statement statement, final FrameworkMethod frameworkMethod, final Object o) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
try {
before();
statement.evaluate();
} finally {
after();
}
}
};
}
protected void before() {
System.out.println("before");
}
public void after() {
System.out.println("after");
}
}
然后,您可以在应该使用它的每个测试类中实例化规则。不需要继承。
public class TestClass {
@Rule
public MyRule myRule = new MyRule();
@Test
public void test() {
}
}