Junit 4如何在测试套件中初始化并将其传递给测试类

时间:2015-01-16 10:01:45

标签: java junit test-suite


   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();
         } 
     }

谢谢,

稻谷

2 个答案:

答案 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并在以后的测试中读取它。