почему assert_equal () в Ruby on Rails иногда кажется сравниваемым по идентичности, а иногда по значению - PullRequest
2 голосов
/ 08 июня 2010

было очень странно, что вчера я проводил интеграционный тест в Rails и

assert_equal array_of_obj1, array_of_obj2     # obj1 from db, obj2 created in test

, и он не прошел.Значения, показанные внутри массива и объектов, были идентичны.Если я изменю тест на

assert array_of_obj1 == array_of_obj2

, тогда он пройдет.

Но сегодня первый тест действительно пройден.По какой причине это может быть?Всегда ли assert_equal использует == или .equal? в Rails 2.2 или 2.3.5?

1 Ответ

2 голосов
/ 21 декабря 2010

assert_equal всегда использует метод ==. Это поведение происходит от ядра Ruby и не переопределяется и не изменяется в Rails. Вы можете прочитать документацию для assert_equal здесь .

Однако следует отметить, что метод == ведет себя по-разному в зависимости от того, к какому объекту он вызывается.

Например, метод Object == сравнивает фактическую идентичность объекта . Однако метод String == сравнивает значения строки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...