比较单元测试中的 swift 类型值 - XCTAssertEqual 与 ==
Comparing swift Type values in unit tests - XCTAssertEqual vs ==
我试图在我的单元测试中比较 swift 类型值,并注意到 XCTAssertEqual 无法编译,而与 == 比较编译正常。
XCTAssertEqual(MyStruct.self, MyStruct.self)
--> 编译失败 "Global function 'XCTAssertEqual(::_:file:line:)' requires that 'MyStruct.Type' conform to 'Equatable'"
XCTAssertTrue(MyStruct.self == MyStruct.self)
--> 编译正常
我想了解这两个比较有什么区别。
XCTAssertEqual
要求其参数符合Equatable
。 MyStruct.Type
是元类型,它和所有元类型一样,不符合Equatable
,所以MyStruct.self
不能作为XCTAssertEqual
的参数。
但是,==
运算符是为所有元类型定义的。这就是您可以对它们使用 ==
的原因。这是 "special case" 实现的 here.
"But isn't ==
one of the requirements of the requirements of Equatable
?" 你可能会说。是的,但这并不意味着实现 ==
的类型自动符合 Equatable
。反之亦然:每个符合 Equatable
的类型都必须实现 ==
.
我试图在我的单元测试中比较 swift 类型值,并注意到 XCTAssertEqual 无法编译,而与 == 比较编译正常。
XCTAssertEqual(MyStruct.self, MyStruct.self)
--> 编译失败 "Global function 'XCTAssertEqual(::_:file:line:)' requires that 'MyStruct.Type' conform to 'Equatable'"
XCTAssertTrue(MyStruct.self == MyStruct.self)
--> 编译正常
我想了解这两个比较有什么区别。
XCTAssertEqual
要求其参数符合Equatable
。 MyStruct.Type
是元类型,它和所有元类型一样,不符合Equatable
,所以MyStruct.self
不能作为XCTAssertEqual
的参数。
但是,==
运算符是为所有元类型定义的。这就是您可以对它们使用 ==
的原因。这是 "special case" 实现的 here.
"But isn't ==
one of the requirements of the requirements of Equatable
?" 你可能会说。是的,但这并不意味着实现 ==
的类型自动符合 Equatable
。反之亦然:每个符合 Equatable
的类型都必须实现 ==
.