On Dec 12, 2013, at 8:25, Mario Ruiz <lists / ruby-forum.com> wrote:

> Hi,
> I'm migrating the ruby framework that I have from Ruby 1.8.7 to 2.0
> In my framework I have some code inside the block at_exit so it will =
run
> after all Ruby code has run... and in 1.8.7 works perfectly when =
running
> any kind of code or even testcases Test::Unit::TestCase, the code was
> something like:
>=20
> require 'my_framework' #at_exit is in my framework
>=20
> MyTestCase < Test::Unit::TestCase
>  def test01
>    puts "my first test"
>  end
>  def test02
>    puts "my second test"
>  end
> end
>=20
> So when it was run the result was:
>=20
> my first test
> my second test
> I'm in the at_exit block
>=20
> But now in Ruby 2 the at_exit block is run before the testcases:
> I'm in the at_exit block
> my first test
> my second test
>=20
>=20
> Any idea how can i have the at_exit like it was before?

The order in which at_exit stuff is run has changed between 1.8 and 1.9. =
Since test/unit runs via at_exit, you need yours to run _after_ your =
tests' at_exit and that has now changed.

You can get around this either by doubling up the at_exit, or using =
minitest's `after_run` call. test/unit in stdlib on 1.9/2.0 is built on =
top of minitest, so this _should_ be OK, but then again, it is a huge =
monkeypatch so it may not work right. I haven't tested it against =
test/unit. That said, it is trivial to convert from test/unit to =
minitest and you get the benefit of the huge ecosystem that comes along =
with it.