2013-06-20 37 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>。這將解決多線程問題。

相關問題