2016-04-14 27 views
0

如何從XCode 7中的另一個XCTestCase子類的測試方法內部運行一個XCTestCase子類的測試方法?如何從XCode 7中的另一個XCTestCase子類的測試方法內運行一個XCTestCase子類的測試方法?

我有一個測試套件用於我的銷售點應用程序。

我有一個名爲「MathTest」的XCTestCase子類,它對應用程序的數學函數進行各種單元測試。它還有一個測試方法testTillMath,它檢查寄存器以查看事務總計是否全部匹配到期望值。

然後我有另一個被稱爲「TicketBuildingTest」 XCTestCase子類,其具有稱爲testCreateTickets從Excel電子表格中的數據源汲取的測試方法,使用任何數據是在電子表格中組裝的特定批次事務的進入一個特殊的核心數據存儲特定於測試環境。如果testCreateTickets首先已經成功運行

testTillMath方法纔會成功。

我怎樣才能讓testTillMath得到後testCreateTickets每次運行已完成?

我試圖從#include MathTest.m的TicketBuildingTest裏面,這樣我可以在testCreateTickets末尾調用testTillMath,但的XCode不會讓我做,其中包括。由於「重複符號_OBJC_CLASS _ $ _ MathTest」導致構建失敗,出現「鏈接器命令失敗並退出代碼1」

我意識到可能有多種方法來剝離這隻貓;在PHPUnit中,我可以指定一組測試方法,以一定順序在一行中全部運行,並在每個測試完成之後運行每個測試。我怎麼能在XCode中做到這一點?

+0

在我看來,測試應儘可能相互獨立。除此之外,我認爲這是不可能的。也許你可以嘗試創建一個共同的超類,並將常見的測試放在那裏。 – dasdom

回答

1

您故意引入了「測試污染」,即一種測試的成功或失敗取決於另一測試成功或失敗的情況。這是一個不好的做法。測試應該是彼此獨立的。這樣您就知道當測試失敗時,由於應用程序中的功能特別是測試功能而失敗,因此您可以追蹤該功能並對其進行修復。調試測試污染是一個真實的考驗,你應該不惜一切代價避免它。

某些測試框架(Rspec,其中一個; Cedar另一個)會隨機化運行測試的順序,這正是爲了阻止您描述的測試耦合類型。

+0

你的回答是正確的,因爲我稱它們爲單元測試。單元測試絕對不應該相互依賴。這就是說,事實證明,我並沒有寫單元測試,但事實上,我正在寫一個[端到端測試](https://www.techopedia.com/definition/7035/end-to -END檢驗)。我們最終使用了四個獨立測試序列,後續測試依賴於以前的測試,以特定的方式(通過一系列模擬的UI交互)設置數據庫。這並不是說端到端測試比單元測試更好。我們也有這些。 – CommaToast

+0

我能夠通過按字母順序排列方法名稱,依次進行端到端測試運行中的測試。然而,在XCode 8中,它似乎隨機化了測試執行的順序。根據你對Rspec和Cedar的評論,我猜他們打算這麼做。沒關係,我們可以使我們的端到端測試符合一種巨大的測試方法。看到每個部分獨立通過是有用的,但我們可以將XCTFail放在關鍵時刻,並具有相同的效果。 – CommaToast

+0

我很高興你能解決你的問題!不過,我在你的評論中提到了一件事:「四次獨立測試,後續測試依賴於以前的測試」。如果後續測試依賴於以前的測試,那麼根據定義,它們不是獨立的 - 這首先導致您的麻煩。我是你的解決方案的忠實粉絲,順便說一句;我經常試圖將我的端到端測試整合到一個所謂的「旅程」測試中。 –

相關問題