О сообщении
Это сообщение, что вроде не ошибка, отображается, когда утверждение не удается, но MiniTest не может найти разницу между объектами.
Check out this method.
diff
запускает #inspect
на двух объектах и запускает инструмент diff. Если нет diff, это сообщение отображается.
В принципе, вам понадобятся два объекта, которые не имеют другого выхода при проверке. Однако это не написано на камне, и некоторые классы в стандартных библиотеках рубинов не заполняют это свойство, например Time
. Когда дело доходит до ваших собственных занятий, возможно, вы написали собственный метод #inspect
?
Относительно Time
, проверяйте только секунды, а не доли, но равенство смотрит на фракции, поэтому два объекта времени могут быть не равными, но при осмотре все равно выглядят одинаково.
Относительно Array
, если объекты, включенные в него, могут быть не равными, но при проверке они выглядят одинаково, это приведет к отображению сообщения.
Если вы получили это сообщение, даже если выходные данные проверки различны, что-то не так с инструментом diff. MiniTest пытается сделать некоторые обоснованные предположения о том, какой инструмент diff использовать. Вы можете проверить выбранный инструмент сравнения, напечатав MiniTest::Assertions.diff
.
На объекте равенства
Если реальная проблема в том, что ваши объекты не равны, когда вы ожидаете, что они будут, вы должны смотреть на то, как метод ==
определен в соответствующих классах. Реализация по умолчанию проверяет идентификаторы объектов, присваиваемые каждому объекту при создании экземпляра, что, вероятно, не является тем, что вы хотите, если, например, имеете дело с объектами, представляющими строки базы данных.
Действительно ли это происходит для * всех * объектов, вы пытались сравнить действительно основные вещи, такие как целые числа? Можете ли вы привести несколько примеров? – Jesper
Вы используете пользовательский diffftool? – Jesper
На самом деле это происходит только для времени, массива и пользовательских объектов, которые я создал, например, класса User. Я не использую никаких специальных инструментов. Пример: 'result = @ service.run' ' result.must_equal (@ users.get_single (1)) ' Примечание: Я также попробовал assert_equal, и то же самое происходит –