Ios XCTAssertEqualObjects的替代品是什么?

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

不确定确切时间,但至少从Xcode 7.2开始,
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)@MaxMacLeod
xctasertequals
使用相等运算符。问题可能出在代码的其他地方。@MaxMacLeod我添加了一个示例,在
=
函数中设置断点会停止执行三次。@MaxMacLeod:如果类继承自NSObject,那么您可能必须重写
isEqual:
,而不是
=
。比较。@Cristik是的,我有子类NSObject,所以它已经实现了Equatable。这可能就是问题所在。我将试试马丁·R的建议。