From: Tanaka Akira Date: 2008-10-18T13:19:46+09:00 Subject: [ruby-core:19374] assert_raises(mod) in minitest assert_raises(mod) in minitest fails even if the raised exception is a kind of mod. But assert_raises in test/unit in ruby 1.8 succeeds. % cat mr.rb require 'minitest/unit' class TestRaises < MiniTest::Unit::TestCase module M end class E < StandardError include M end def test_raise assert_raises(M) { raise E } end end MiniTest::Unit.autorun % ./ruby mr.rb Loaded suite mr Started F Finished in 0.001769 seconds. 1) Failure: test_raise(TestRaises) [/home/ruby/tcstate/lib/ruby/1.9.0/minitest/unit.rb:142]: <[TestRaises::M]> exception expected, not Class: Message: <"TestRaises::E"> ---Backtrace--- mr.rb:12:in `block in test_raise' ---------------. Expected [TestRaises::M] to include TestRaises::E. 1 tests, 2 assertions, 1 failures, 0 errors, 0 skips % cat tr.rb require 'test/unit' class TestRaises < Test::Unit::TestCase module M end class E < StandardError include M end def test_raise assert_raises(M) { raise E } end end % ruby-1.8 tr.rb Loaded suite tr Started . Finished in 0.001355 seconds. 1 tests, 1 assertions, 0 failures, 0 errors The following patch modifies minitest to succeed it. % svn diff --diff-cmd diff -x -u lib/minitest/unit.rb Index: lib/minitest/unit.rb =================================================================== --- lib/minitest/unit.rb (revision 19827) +++ lib/minitest/unit.rb (working copy) @@ -139,7 +139,8 @@ yield should_raise = true rescue Exception => e - assert_includes(exp, e.class, exception_details(e, "<#{mu_pp(exp)}> exception expected, not")) + assert_respond_to exp, :any? + assert(exp.any? {|m| e.kind_of? m }, exception_details(e, "<#{mu_pp(exp)}> exception expected, not")) return e end -- Tanaka Akira