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
.
不确定确切时间,但至少从 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
.