[英]Junit 4 how to initialize in test suite and pass it to test classes
Junit4中是否可以将某些预初始化的数据(例如您使用“ @RunWith(Suite.class)”注释的类中使用“ @ClassRule”初始化的http连接)传递给所有子级(即套件)测试类? 另外,如何确保套件中的类不能单独运行?
例如
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();
}
}
谢谢,
稻田
我认为您无法使用JUnit来实现。
我看到的唯一可能性是使用一个抽象类,并在每个测试类中继承那个抽象类。
public abstract class AbstractTest {
@ClassRule
public static ExternalResource resource= new ExternalResource() {
//...
}
}
public class MyTest extends AbstractTest {
}
另外,如何确保套件中的类不能单独运行?
我也不认为这是可能的。
但是你为什么要那样? 修复单个失败的测试后,您是否真的要重新运行所有测试以检查一项测试是否有效? (当然,该修复程序可能会带来副作用,但是当您知道固定测试正在运行时,可以重新运行所有测试。)此外,这些测试应该能够独立运行。
当您使用开箱即用的JUnit Runners
,您将可以从测试Suite
对其子测试进行任何访问。 测试类的实例化在框架内部完成。
如果您想将信息/状态从一个测试传递到另一个测试,我想实现某种“上下文”。 例如,带有上下文的静态Getter和Setter的Singleton ,允许您的套件存储Object
并在以后的测试中读取它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.