如何在Junit中清除afterClass的实例?

时间:2013-04-18 10:15:40

标签: java junit theory

我正在寻找收集和发布这些myResults的方法。但Junit @AfterClass仅支持静态方法。

如果我正在使用超级类如果运行多个测试用例,则可能很难看。知道如何解决这个问题吗?如果我之后使用,我将无法获得myresult收集的全部输出

abstract class MainTestCase{
  static List<String> myResults = new ArrayList();

  @AfterClass public static void WrapUp() {

    //code to write the myResults to text file  goes here
    System.out.println("Wrapping Up");
    myResults.clear()
  }

}

@RunWith(Theories.class)
public class TheoryAfterClassTest extends MainTestCase {

  @DataPoint
  public static String a = "a";

  @DataPoint
  public static String b = "bb";

  @DataPoint
  public static String c = "ccc";

  @Theory
  public void stringTest(String x, String y) {
    myResults.add(x + " " + y);
    System.out.println(x + " " + y);
  }      
}

1 个答案:

答案 0 :(得分:2)

List<String> myResults;放入ThreadLocal可以解决问题,这就是所有并行测试用例都有自己的myResults实例。

static ThreadLocal<List<String>> myResults = new ThreadLocal<>();

@BeforeClass
public static void setUpClass() {
    myResults.set(new ArrayList<String>());
}

// use it later in your code
@Test
public void myTestCase() {
     myResults.get().add("result");
}