CGFloat Equatable因相同值而失败

时间:2017-11-06 09:54:24

标签: ios swift xctest xctestcase

enter image description here

XCTAssertEqual failed: ("1.4") is not equal to ("1.4") -

运行测试时出现以下错误,如屏幕截图所示:
<connectionStrings> <add name="Model1ConnectionString" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SQLite.EF6;provider connection string='data source=&quot;C:\Users\gtmaster\Documents\Visual Studio 2017\Projects\SQLiteTest\SQLiteTest\test.db&quot;'" providerName="System.Data.EntityClient" /> </connectionStrings>

有没有人有任何解决方案或解释?

2 个答案:

答案 0 :(得分:3)

如果我没有犯错误,请查看CGFloat的评估选项:

XCTAssertEqual(_, _, accuracy:)

在这种情况下,您可以设置准确度来评估CGFloat数字,因为在不考虑帐户准确性的情况下对其进行评估是不对的。

答案 1 :(得分:2)

  

有没有人有任何解决方案或解释?

解决方案是Oleg所建议的。解释是1.4不能表达为CGFloat。在正常的小数中,您可能已经注意到,除非分数的分母只能被2或5(因子10)整除,当您尝试将其转换为十进制数时,它将永远持续下去。例如。 1/3是0.33333333333 ...

同样适用于CGFloats,除了数字基数是2,而不是10. 1.4是7/5。 5不能被2整除,因此如果转换为二进制数,它将永远重复。事实上,它将是1.0110011 ......

因此,您的view.frame.origin.x可能是接近1.4但不完全是1.4的数字,而您的xCoordinate将是一个非常接近1.4的不同数字。这两个数字不相等,但是当四舍五入到要打印的六个小数位时,看起来像1.4。