2010-09-02 257 views
11

我在XCode中使用SenTest進行單元測試。我必須爲我的單元測試運行一個命令行任務來測試。我可以在我的測試類的+初始化方法(當然是SenTestCase的子類)中做到這一點。SenTestKit:所有測試運行後清理?

我想在測試完成時終止命令行任務。由於沒有+初始化的對立面,所以我很難過。

是否有某種方法來繼承SenTest類來做到這一點,我忽略了?

回答

36

不要在+初始化中運行命令行工具。當類首先發送任何消息時,由Objective-C運行時發送。

相反,在測試的+setUp方法中運行命令行工具。 (請注意,我真的沒有意思+setUp而不是-setUp;許多人似乎是對類和實例方法之間的區別有點模糊)

在這種情況下,setUp方法是通過的OCUnit之前調用的一個子類SenTestCase測試任何被運行,並且一個tearDown方法由後的OCUnit在一個SenTestCase子類AR運行所有測試調用。

因此,對於一個特定的SenTestCase子類的整個流程是:

  • 發送+setUpSomeTestCase
  • 每個test方法SomeTestCase(稱之爲test___
    • 開始創建的新實例SomeTestCase
    • 發送-setUp給它
    • 發送-test___
    • 發送-tearDown
    • 釋放它
  • 發送+tearDownSomeTestCase

這樣,如果你有什麼需要之前,任何的做你的-test方法運行,或所有-test方法運行後需要完成的事情,有一個確定性的點在wh你可以做到這一點。 (而不是依靠內存管理,這不是確定性的,如果你使用GC,可能不是確定性的。)

+2

我還沒有找到任何關於+ setUp/+拆卸方法的內容。謝謝你的啓發。 – Mel 2010-09-04 20:14:23

0

您應該查看Google Toolbox for Mac或其更多衍生產品GHUnit。兩者(我認爲)至少提供課堂級別的設置和拆解。如果你真的想在運行所有測試之前運行一個命令行,然後在運行測試之後運行第二個命令行(也許殺死第一個命令行),我將修改運行單元測試的shell腳本構建階段(最後一步在UnitTest捆綁包目標的構建階段)。

+4

您不需要任何額外的框架來進行類級別的設置和拆卸;這些是OCUnit的一部分。 – 2010-09-04 10:45:29