比较单元测试中的 swift Type 值 - XCTAssertEqual vs ==

Posted

技术标签:

【中文标题】比较单元测试中的 swift Type 值 - XCTAssertEqual vs ==【英文标题】:Comparing swift Type values in unit tests - XCTAssertEqual vs == 【发布时间】:2020-03-18 07:19:48 【问题描述】:

我试图在我的单元测试中比较 swift Type 值,并注意到 XCTAssertEqual 无法编译,而与 == 比较可以正常编译。

XCTAssertEqual(MyStruct.self, MyStruct.self) --> 编译失败,出现错误“全局函数 'XCTAssertEqual(::_:file:line:)' 要求 'MyStruct.Type' 符合 'Equatable'”

XCTAssertTrue(MyStruct.self == MyStruct.self) --> 编译正常

我想了解这两个比较之间有什么区别。

【问题讨论】:

错误信息还不够清楚吗? MyStruct.Type 不符合 EquatableXCTAssertEqual 要求其参数符合该协议。 @Sweeper 不应该 == 在这种情况下也会失败吗? 【参考方案1】:

XCTAssertEqual 要求其参数符合EquatableMyStruct.Type 是一种元类型,与所有元类型一样,它不符合Equatable,因此MyStruct.self 不能用作XCTAssertEqual 的参数。

但是,== 运算符是为所有元类型定义的。这就是您可以在它们上使用== 的原因。这是here实现的“特例”。

“但是==不是Equatable的要求之一吗?”你可能会说。是的,但这并不意味着实现== 的类型会自动符合Equatable。反之亦然:符合Equatable 的每个类型都必须实现==

【讨论】:

以上是关于比较单元测试中的 swift Type 值 - XCTAssertEqual vs ==的主要内容,如果未能解决你的问题,请参考以下文章

swift Xcode单元测试:无法将“Person”类型的值转换为预期的参数类型“Person”

如何在 Swift 中设置单元测试?

Swift 中的单元测试 HKSampleQuery

寒哥带你深入了解Swift中的Value Type

Xcode 8 / Swift 3 中的 iOS 异步单元测试(waitForExpectations 失败)

如何将当前单元格中的数据与 TableView Swift 4 中的前一个单元格进行比较?