Ios XCTAssertEqualObjects的替代品是什么?
不确定确切时间,但至少从Xcode 7.2开始,Ios XCTAssertEqualObjects的替代品是什么?,ios,swift,xctest,Ios,Swift,Xctest,不确定确切时间,但至少从Xcode 7.2开始,XctaserteQualobjects不再可用 有没有替代品,而不必求助于 XCTAssertTrue(foo == bar) 请注意,Apple的出现已经过时,仍然是指缺少的类 对于Swift,您只需使用xctasertequal 您的对象需要实现equalable协议,以便宏可以使用= 例如: import XCTest class A: Equatable { let name: String init(name
XctaserteQualobjects
不再可用
有没有替代品,而不必求助于
XCTAssertTrue(foo == bar)
请注意,Apple的出现已经过时,仍然是指缺少的类 对于Swift,您只需使用
xctasertequal
您的对象需要实现equalable
协议,以便宏可以使用=
例如:
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中,那里的值类型要丰富得多 如果您想测试符合
equalable
定义的相等性,请使用:
XCTAssertTrue(a == b)
如果要测试两种引用类型是否相等:
XCTAssertTrue(a === b)
我觉得这样更好,因为断言更明确;对象是否相等或相同
还记得关于Swift中的值类型的WWDC15课程吗?该课程建议始终使您的值类型符合
equalable
,但不幸的是,这不起作用。请参阅我对XCTAssertEqual的评论,它不会触发==的自定义实现中的断点。xctasertequal似乎基于对象等价性返回。要触发my==func,我必须指定xctasertrue(a==b)@MaxMacLeodxctasertequals
使用相等运算符。问题可能出在代码的其他地方。@MaxMacLeod我添加了一个示例,在=
函数中设置断点会停止执行三次。@MaxMacLeod:如果类继承自NSObject,那么您可能必须重写isEqual:
,而不是=
。比较。@Cristik是的,我有子类NSObject,所以它已经实现了Equatable。这可能就是问题所在。我将试试马丁·R的建议。