Fab*_*lva 6 ruby ubuntu minitest
每当我尝试assert_equal两个对象时,我总是得到这样的错误:
No visible difference in the User#inspect output.
You should look at the implementation of #== on User or its members.
Run Code Online (Sandbox Code Playgroud)
它也发生在Time和Array上.最小的文档也没有真正说明这一点.
我使用的是Ruby 2.0.0,但我使用的是2.2.0,同样的事情发生了.使用最新的minitest.
另外,我正在运行Ubuntu 14.10.
当断言失败时,会显示此消息(有点不是错误),但MiniTest无法找到对象之间的差异.
diff
运行#inspect
的两个对象,并可以运行在一个diff工具.如果没有差异,则显示此消息.
原则上,在检查时,您需要两个不相等的对象具有不同的输出.虽然这不是一成不变的,但ruby标准库中的某些类并没有完全满足这个属性Time
.谈到你自己的课程,也许你已经编写了一个自定义#inspect
方法?
关于Time
,检查只显示秒,而不是分数,但是等于查看分数,因此两个时间对象可能不相等但在检查时看起来仍然相同.
关于Array
,如果包含在其中的对象可能不相等但在检查时看起来相同,这将导致显示消息.
即使检查输出不同,如果您收到此消息,则diff工具出现问题.MiniTest试图做一些有关使用哪种diff工具的有根据的猜测.您可以通过打印检查所选的差异工具MiniTest::Assertions.diff
.
如果真正的问题是您的对象在您期望它们时不相等,那么您应该看看如何==
在相应的类中定义该方法.默认实现查看实例化时为每个对象提供的对象ID,这可能不是您想要的,例如处理表示数据库行的对象.
归档时间: |
|
查看次数: |
2966 次 |
最近记录: |