Minitest断言未通过检查

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.

Jes*_*per 8

关于消息

当断言失败时,会显示此消息(有点不是错误),但MiniTest无法找到对象之间的差异.

看看这个方法.

diff运行#inspect的两个对象,并可以运行在一个diff工具.如果没有差异,则显示此消息.

原则上,在检查时,您需要两个不相等的对象具有不同的输出.虽然这不是一成不变的,但ruby标准库中的某些类并没有完全满足这个属性Time.谈到你自己的课程,也许你已经编写了一个自定义#inspect方法?

关于Time,检查只显示秒,而不是分数,但是等于查看分数,因此两个时间对象可能不相等但在检查时看起来仍然相同.

关于Array,如果包含在其中的对象可能不相等但在检查时看起来相同,这将导致显示消息.

即使检查输出不同,如果您收到此消息,则diff工具出现问题.MiniTest试图做一些有关使用哪种diff工具的有根据的猜测.您可以通过打印检查所选的差异工具MiniTest::Assertions.diff.

关于对象平等

如果真正的问题是您的对象在您期望它们时不相等,那么您应该看看如何==在相应的类中定义该方法.默认实现查看实例化时为每个对象提供的对象ID,这可能不是您想要的,例如处理表示数据库行的对象.