2016-09-29 91 views
1

XCTest測試函數按字母順序調用(在Xcode 8之前)。使用Xcode 8,我無法假定系統調用測試用例的順序。如何在Xcode 8中按順序調用XCTest測試用例函數?

有人可以投光嗎?一類內

+1

在我看來,你的測試不應該依賴於它們被調用的順序。 – dasdom

+0

謝謝。我將使所有測試用例獨立:) – Confused

+0

@Confused我已經檢查過這個。但是在xcode 9.1中它只按字母順序排列。 – Urmi

回答

4

測試是按隨機順序在Xcode 8.運行這鼓勵測試是獨立重複


我假設你想以特定的順序運行你的測試,因爲它們彼此「鏈接」。例如,test_A記錄了一位假用戶,並且test_B向購物車中添加了一項。應該避免這些類型的測試,因爲它們相互依賴太多。如果你想單獨運行test_F怎麼辦?您不必運行AE只是爲了驗證F仍然有效。此外,你可能會引入測試污染,影響其他測試的方式,你還沒有意識到。

也就是說,在測試之間具有共同或共享的行爲是好的,甚至是令人鼓舞的。您可以將此登錄名置於setUp方法或extract private helper methods以處理特定事件。例如,這裏有一個很高的示例

class AppTests: XCTestCase { 
    let subject = ViewController() 

    func setUp() { 
     super.setUp() 
     login(email: "[email protected]", password: "password") 
    } 

    func test_AddingItemsToCart() { 
     addItemToCart(21) 
     XCTAssertEqual(subject.itemsInCartLabel.text, "1") 
    } 

    func test_Checkout() { 
     addItemToCart(15) 
     checkout() 
     XCTAssertEqual(subject.totalPriceLabel.text, "$21") 
    } 

    private func login(email: String, password: String) { ... } 
    private func addItemToCart(item: Int) { ... } 
    private func checkout() { ... } 
} 
+0

感謝您的回答。我可以理解獨立測試用例的本質。這幫助我很多! – Confused

+0

考慮這種情況。我有兩個班。一個用於登錄,另一個用於註銷。 Login類有三個測試用例,Logout類有兩個測試用例。當我通過Product - > Test運行測試用例時,哪個類將首先被​​調用?系統在運行時是否隨機選擇完成?我能否定義需要至少被調用的類的順序? – Confused

+0

我認爲我的回答也適用於您的評論:-)您可以將輔助方法移出特定類以在文件之間共享它們。 –

相關問題