Issue #10745 has been updated by Tsuyoshi Sawada.


Benoit Daloze wrote:
>  I disagree, the exception is more useful as an error than just assert_equal returning false.

According to http://docs.ruby-lang.org/ja/2.1.0/method/Test=3a=3aUnit=3a=3aAssertions/i/assert_equal.html, it should raise `MiniTest::Assertion` error, which should wrap the message and backtrace from the `NoMethodError`. It should not raise a `NoMethodError`. This is a bug of minitest in that it could not properly handle the test object's (ipaddr) bug.

----------------------------------------
Bug #10745: Special combinations of parameters in assert_equal (test/unit) may cause exceptions
https://bugs.ruby-lang.org/issues/10745#change-51080

* Author: Herwin .
* Status: Rejected
* Priority: Low
* Assignee: 
* ruby -v: 2.1.2p95
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
~~~ruby
require 'test/unit'
require 'ipaddr'

class TestX < Test::Unit::TestCase
  def test_x
    assert_equal([IPAddr.new('1.2.3.4')], [[1,2,3]])
  end
end
~~~

This results in the following trace:

~~~
NoMethodError: undefined method `to_i' for [1, 2, 3]:Array
    /usr/lib/ruby/2.1.0/ipaddr.rb:471:in `initialize'
    /usr/lib/ruby/2.1.0/ipaddr.rb:516:in `new'
    /usr/lib/ruby/2.1.0/ipaddr.rb:516:in `coerce_other'
    /usr/lib/ruby/2.1.0/ipaddr.rb:150:in `=='
    /usr/lib/ruby/2.1.0/test/unit/assertions.rb:250:in `=='
    /usr/lib/ruby/2.1.0/test/unit/assertions.rb:250:in `assert_equal'
~~~

I don't think the `assert_equal` is supposed to throw these kind of errors



-- 
https://bugs.ruby-lang.org/