> This also has another small advantage – when someone add a new test case they can't "forget" to use a helper method etc to accidentally introduce a slow test.

@senny I agree with the above point that @chancancode made.  Furthermore, I've dug deeper into ```MiniTest::Test``` and realized that we should not have to handle cleanup directly in the test methods. Instead, ```MiniTest``` was written with the intent that even if an assertion fails or an error was raised, ```teardown``` will still be executed. Therefore, resetting the modification of global states could be handled in ```teardown``` with confidence. The benefit of doing so is that the tests will become DRYer and makes the test more readable since the starting and ending states are well defined in ```setup``` and ```teardown``` respectively.

```ruby
    # minitest/lib/minitest/test.rb
    def run
      with_info_handler do
        time_it do
          capture_exceptions do
            before_setup; setup; after_setup

            self.send self.name
          end

          %w{ before_teardown teardown after_teardown }.each do |hook|
            capture_exceptions do
              self.send hook
            end
          end
        end
      end

      self # per contract
    end

    def capture_exceptions # :nodoc:
      begin
        yield
      rescue *PASSTHROUGH_EXCEPTIONS
        raise
      rescue Assertion => e
        self.failures << e
      rescue Exception => e
        self.failures << UnexpectedError.new(e)
      end
    end
```