XCTAssertEqualObjects 的替代品是什么?

What is the replacement for XCTAssertEqualObjects?

不确定确切时间,但至少从 Xcode 7.2 开始,XCTAssertEqualObjects 不再可用。

有没有不用求助的替代品?

   XCTAssertTrue(foo == bar)

请注意,Apple 的 "Writing Test Classes and Methods" 似乎已过时,但仍指代缺失的 class。

对于 Swift 你可以只使用 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
    }
}

我会更具体地说明您要测试的内容。

平等和同一性不是一回事,尤其是在 Swift 那里有更丰富的值类型。

如果要测试符合 Equatable 定义的相等性,请使用:

XCTAssertTrue(a == b)

如果要测试两个引用类型是否相等:

XCTAssertTrue(a === b)

我觉得这样更好,因为断言更明确; objects 是否相等或相同。

记住 Swift 中有关值类型的 WWDC15 session - 建议始终使您的值类型符合 Equatable.