2010-06-08 1 views
2

그것은 내가 통합 레일에서 테스트 및Ruby on Rails의 assert_equal()이 Identity와 때때로 값으로 비교되는 경우가있는 이유는 무엇입니까?

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

을했다 실패했습니다, 어제 아주 이상한. 배열 및 객체 내부에 표시된 값은 동일합니다. 테스트를 변경하면

assert array_of_obj1 == array_of_obj2 

그러면 테스트가 통과됩니다.

하지만 오늘은 첫 번째 테스트가 실제로 통과되었습니다. 그게 무슨 이유일까요? asserts_equal은 Rails 2.2 또는 2.3.5에서 항상 == 또는 .equal?을 사용합니까?

답변

2

assert_equal은 항상 == 메서드를 사용합니다. 이 동작은 Ruby 코어에서 발생하며 Rails에서 재정의되거나 변경되지 않습니다. assert_equal에 대한 설명서를 읽을 수 있습니다. here

그러나 == 메서드는 호출되는 개체에 따라 다르게 동작합니다.

예를 들어 Object == 메서드는 실제 object identity을 비교합니다. 그러나 String == 메서드는 values of the string을 비교합니다.