Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Object
A simple hook allowing you to run a block of code after the tests are done. Eg:
MiniTest::Unit.after_tests { p $debugging_info }
# File minitest/unit.rb, line 645 def self.after_tests at_exit { at_exit { yield } } end
Registers MiniTest::Unit to run tests at process exit
# File minitest/unit.rb, line 652 def self.autorun at_exit { next if $! # don't run if there was an exception # the order here is important. The at_exit handler must be # installed before anyone else gets a chance to install their # own, that way we can be assured that our exit will be last # to run (at_exit stacks). exit_code = nil at_exit { exit false if exit_code && exit_code != 0 } exit_code = MiniTest::Unit.new.run ARGV } unless @@installed_at_exit @@installed_at_exit = true end
Returns the stream to use for output.
DEPRECATED: use ::output instead.
# File minitest/unit.rb, line 681 def self.out warn "::out deprecated, use ::output instead." if $VERBOSE output end
Returns the stream to use for output.
# File minitest/unit.rb, line 672 def self.output @@out end
Sets MiniTest::Unit to write output to
stream
. $stdout is the default output
# File minitest/unit.rb, line 690 def self.output= stream @@out = stream end
Return all plugins’ run methods (methods that start with “run_”).
# File minitest/unit.rb, line 714 def self.plugins @@plugins ||= (["run_tests"] + public_instance_methods(false). grep(/^run_/).map { |s| s.to_s }).uniq end
Returns the MiniTest::Unit subclass instance that will be used to run the tests. A MiniTest::Unit instance is the default runner.
# File minitest/unit.rb, line 707 def self.runner @@runner ||= self.new end
Tells MiniTest::Unit to delegate to
runner
, an instance of a MiniTest::Unit subclass, when #run is called.
# File minitest/unit.rb, line 698 def self.runner= runner @@runner = runner end
Top level driver, controls all output and filtering.
# File minitest/unit.rb, line 890 def _run args = [] self.options = process_args args puts "Run options: #{help}" self.class.plugins.each do |plugin| send plugin break unless report.empty? end return failures + errors if @test_count > 0 # or return nil... rescue Interrupt abort 'Interrupted' end
# File minitest/unit.rb, line 732 def _run_anything type suites = TestCase.send "#{type}_suites" return if suites.empty? start = Time.now puts puts "# Running #{type}s:" puts @test_count, @assertion_count = 0, 0 sync = output.respond_to? :"sync=" # stupid emacs old_sync, output.sync = output.sync, true if sync results = _run_suites suites, type @test_count = results.inject(0) { |sum, (tc, _)| sum + tc } @assertion_count = results.inject(0) { |sum, (_, ac)| sum + ac } output.sync = old_sync if sync t = Time.now - start puts puts puts "Finished #{type}s in %.6fs, %.4f tests/s, %.4f assertions/s." % [t, test_count / t, assertion_count / t] report.each_with_index do |msg, i| puts "\n%3d) %s" % [i + 1, msg] end puts status end
# File minitest/unit.rb, line 773 def _run_suite suite, type header = "#{type}_suite_header" puts send(header, suite) if respond_to? header filter = options[:filter] || '/./' filter = Regexp.new $1 if filter =~ /\/(.*)\// assertions = suite.send("#{type}_methods").grep(filter).map { |method| inst = suite.new method inst._assertions = 0 print "#{suite}##{method} = " if @verbose @start_time = Time.now result = inst.run self time = Time.now - @start_time print "%.2f s = " % time if @verbose print result puts if @verbose inst._assertions } return assertions.size, assertions.inject(0) { |sum, n| sum + n } end
# File minitest/unit.rb, line 769 def _run_suites suites, type suites.map { |suite| _run_suite suite, type } end
# File minitest/unit.rb, line 837 def process_args args = [] options = {} orig_args = args.dup OptionParser.new do |opts| opts.banner = 'minitest options:' opts.version = MiniTest::Unit::VERSION opts.on '-h', '--help', 'Display this help.' do puts opts exit end opts.on '-s', '--seed SEED', Integer, "Sets random seed" do |m| options[:seed] = m.to_i end opts.on '-v', '--verbose', "Verbose. Show progress processing files." do options[:verbose] = true end opts.on '-n', '--name PATTERN', "Filter test names on pattern." do |a| options[:filter] = a end opts.parse! args orig_args -= args end unless options[:seed] then srand options[:seed] = srand % 0xFFFF orig_args << "--seed" << options[:seed].to_s end srand options[:seed] self.verbose = options[:verbose] @help = orig_args.map { |s| s =~ /[\s|&<>$()]/ ? s.inspect : s }.join " " options end
Writes status for failed test meth
in klass
which
finished with exception e
# File minitest/unit.rb, line 813 def puke klass, meth, e e = case e when MiniTest::Skip then @skips += 1 return "S" unless @verbose "Skipped:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n" when MiniTest::Assertion then @failures += 1 "Failure:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n" else @errors += 1 bt = MiniTest::filter_backtrace(e.backtrace).join "\n " "Error:\n#{meth}(#{klass}):\n#{e.class}: #{e.message}\n #{bt}\n" end @report << e e[0, 1] end
Begins the full test run. Delegates to runner
‘s #_run method.
# File minitest/unit.rb, line 883 def run args = [] self.class.runner._run(args) end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.