2013-06-20 36 views
0

我正在使用JUnitCore以编程方式运行一些JUnit测试,并且一旦完成后我想从测试类中获取一些数据(因此@AfterClass)。这里是我下工作的约束伪代码示例:在线程环境中从JUnit测试类中获取数据

public class A { 
    public static String testData;  

    public static void runTest() { 
     JUnitCore juc = new JUnitCore(); 
     juc.run(B); 

     // This is where I would like to access testData for this 
     // particular run 
    } 

    public static void setTestData(String s) { 
     testData = s; 
    } 
} 

public class B { 
    // Some @Test methods and stuff omitted 

    @AfterClass 
    public static void done(String s) { 
     A.setTestData(someData); 
    } 
} 

我的问题是不同的线程可能会调用runTest(),所以testData可能是错误的。我如何解决这个问题?我很迷茫。

+0

* runTest *只读取数据吗?如果是这样,你应该没有任何问题,假设* run * *在* done *之后启动。 – Pragmateek

+0

@Pragmateek也许我的例子并不是最清楚的,对不起。基本上runTest()被调用,这将导致B中的方法执行。如果我正确理解JUnit,runTest()将不会完成,直到done()完成。我想在runTest()方法中获取done()设置的数据。 – chris

+1

为什么你所有的方法都是静态的?如果你需要运行一个上下文,你最好(如果可以的话)使用实例方法,以便每个线程都可以使用它自己的一组本地数据。如果所有线程都需要相同的数据,则需要进行一些同步。你能详细说明你的情况吗? – Pragmateek

回答

1

如果您确实需要/想要使用此设计,您可以制作testData a java.lang.ThreadLocal<String>。这将解决多线程问题。

相关问题