2016-01-13 147 views

回答

1

對於斯威夫特,你可以只使用XCTAssertEqual

你的對象需要實現Equatable協議,宏可以使用==


例子:

import XCTest 

class A: Equatable { 
    let name: String 
    init(name: String) { 
     self.name = name 
    } 
} 
func ==(lhs: A, rhs: A) -> Bool { 
    return lhs.name == rhs.name 
} 

class FooTests: XCTestCase { 
    func testFoo() { 
     let a = A(name: "foo") 
     let a1 = A(name: "foo") 
     let b = A(name: "bar") 
     XCTAssertEqual(a, a) 
     XCTAssertEqual(a, a1) 
     XCTAssertEqual(a, b) // will fail 
    } 
} 
+0

不幸運。見我在http://stackoverflow.com/questions/25341705/xctassertequal-for-custom-objects-in-swift XCTAssertEqual評論不會觸發斷點在我==的自定義實現。 XCTAssertEqual似乎基於對象等價返回。要觸發我的== func,我必須指定XCTAssertTrue(a == b) –

+0

@MaxMacLeod'XCTAssertEquals'確實使用了相等運算符。也許問題在於你的代碼中的其他地方。 – Cristik

+0

@MaxMacLeod我已經添加了一個例子,在'=='func中設置斷點三次停止執行。 – Pascal

0

我會有點更具體的瞭解你正在測試的內容。

平等和身份是不一樣的事情,尤其是在斯威夫特那裏有更加豐富的價值類型。

如果你想測試平等的一致性所定義的Equatable然後使用:

XCTAssertTrue(a == b) 

如果你想測試兩個引用類型相同:

XCTAssertTrue(a === b) 

我覺得這是更好因爲斷言更加明確;是相同還是相同的對象。

記得斯威夫特價值類型的WWDC15會議 - 其中建議總是讓你的值類型符合Equatable

+0

酷感謝@Abizern! –