2011-08-18 108 views
1

我有這樣的代碼:JUnit TestCase功能如何實際工作?

public class MyTest extends TestCase { 
    private MyObject mObject1; 
    private MyObject mObject2; 
    ... 
    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 
    } 
    public void testSomething() { 
     mObject1 = new MyObject(); 
     mObject2 = new MyObject(); 
    } 
    public void testSomething2() { 
     // Here I can't access the previously created objects mObject1 and 
     // mObject2, because they are again null. 
     // Why is that, if *my* setUp() method doesn't touch them? 
    } 

我的猜測是,JUnit的再次每次實例化類。有人可以向我解釋工作流程嗎?

謝謝。

回答

2

JUnit會實例化的類(MyTest的)每個測試一次,然後執行這些方法

  • 設置()
  • 的testXXX()
  • TEARDOWN()

直到它運行所有以測試開始並且沒有收到任何參數的方法。所以在你的例子中,Junit會實例化MyTest兩次。您可以在JUnit documentation中閱讀更多關於此的內容。

請記住,這是編寫測試的舊方法。從Junit 4(我認爲)首選的方法是使用註釋。您可以查看註釋文檔here。作爲一個說明,NUnit重用了測試的實例,因此在同一場景中,它只會實例化MyTest一次。

1

JUnit會根據測試方法實例化一次這個類,所以在上面的代碼中只有一次,但是用兩種測試方法再試一次,你會看到它實例化了兩次。如果你想在某些狀態下保存一些狀態而不需要使用靜態,請看TestNG,它將所有測試方法重複使用同一個實例。

+0

感謝您對TestNG的評論。我會看看! – kaneda