Junit4中是否有一种方法可以传递一些预先初始化的数据,例如您使用Say' @ ClassRule'初始化的http连接。在使用' @RunWith(Suite.class)'注释的类中所有儿童(即套房)测试课程?另外如何确保套件中的类不能单独运行?
e.g。
class A {
private HttpClient client;
@Test
public void someTest() {
client.execute(...);
...
}
}
@RunWith(Suite.class)
@Suite.SuiteClasses({A.class})
public class Suite {
private static HttpClient client;
@ClassRule
public static ExternalResource resource= new ExternalResource() {
@Override
protected void before() throws Throwable {
client = new DefaultHttpClient();
}
}
谢谢,
稻谷
答案 0 :(得分:1)
我不认为你可以通过JUnit实现这一目标。
我看到的唯一可能是使用抽象类并在每个测试类中继承该抽象类。
public abstract class AbstractTest {
@ClassRule
public static ExternalResource resource= new ExternalResource() {
//...
}
}
public class MyTest extends AbstractTest {
}
另外如何确保套件中的类不能单独运行?
我认为这也不可能。
但你为什么要这样呢? 在修复单个失败测试后,您是否真的想重新运行所有测试以检查一个测试是否正常? (当然,修复可能会引入副作用,但是当您知道固定测试正在运行时,您可以重新运行所有测试。) 此外,测试应该能够独立运行。
答案 1 :(得分:0)
当您使用JUnit的开箱即用Runners
时,您将获得从测试Suite
到其子测试的任何访问权限。测试类的实例化在框架内部完成。
如果你想将信息/状态从一个测试传递到另一个测试,我想要实现某种“上下文”。例如。带有静态Getter和Setter的Singleton上下文,允许您的套件存储Object
并在以后的测试中读取它。