不確定何時,但至少從Xcode 7.2,XCTAssertEqualObjects
不再可用。什麼是XCTAssertEqualObjects的替代品?
是否有此一更換,而不必訴諸?
XCTAssertTrue(foo == bar)
需要注意的是蘋果的"Writing Test Classes and Methods"出現過時,仍然是指缺少類。
不確定何時,但至少從Xcode 7.2,XCTAssertEqualObjects
不再可用。什麼是XCTAssertEqualObjects的替代品?
是否有此一更換,而不必訴諸?
XCTAssertTrue(foo == bar)
需要注意的是蘋果的"Writing Test Classes and Methods"出現過時,仍然是指缺少類。
對於斯威夫特,你可以只使用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
}
}
我會有點更具體的瞭解你正在測試的內容。
平等和身份是不一樣的事情,尤其是在斯威夫特那裏有更加豐富的價值類型。
如果你想測試平等的一致性所定義的Equatable
然後使用:
XCTAssertTrue(a == b)
如果你想測試兩個引用類型相同:
XCTAssertTrue(a === b)
我覺得這是更好因爲斷言更加明確;是相同還是相同的對象。
記得斯威夫特價值類型的WWDC15會議 - 其中建議總是讓你的值類型符合Equatable
。
酷感謝@Abizern! –
不幸運。見我在http://stackoverflow.com/questions/25341705/xctassertequal-for-custom-objects-in-swift XCTAssertEqual評論不會觸發斷點在我==的自定義實現。 XCTAssertEqual似乎基於對象等價返回。要觸發我的== func,我必須指定XCTAssertTrue(a == b) –
@MaxMacLeod'XCTAssertEquals'確實使用了相等運算符。也許問題在於你的代碼中的其他地方。 – Cristik
@MaxMacLeod我已經添加了一個例子,在'=='func中設置斷點三次停止執行。 – Pascal