Slow builds got you down? Have no idea where that slow test is? Get the latest in monkey-patched hotness:
require'test/unit/ui/console/testrunner'Test::Unit::UI::Console::TestRunner.class_evaldo@@test_times=[]old_attach_to_mediator_method=instance_method(:attach_to_mediator)define_method:attach_to_mediatordoold_attach_to_mediator_method.bind(self).call@mediator.add_listener(Test::Unit::TestCase::STARTED,&method(:record_start_time))@mediator.add_listener(Test::Unit::TestCase::FINISHED,&method(:record_elapsed_time))@mediator.add_listener(Test::Unit::UI::TestRunnerMediator::FINISHED,&method(:print_times))enddefrecord_start_time(name)@start_time=Time.nowenddefrecord_elapsed_time(name)@@test_times<<{:name=>name,:time=>(Time.now-@start_time)}enddefprint_times(suite_elapsed_time)unless@@test_times.empty?puts''puts"Displaying 10 longest running tests:"@@test_times.sort_by{|t|t[:time]}.reverse[0...10].eachdo|test_timing|puts"#{test_timing[:time]} seconds for #{test_timing[:name]}"endendendend
And you get some output like this:
Displaying 10 longest running tests:
0.159756 seconds for test_awarding_0.04_points_per_passing_yard(Units::PlayerStatsTest)
0.000432 seconds for test_awarding_6_points_per_return_touchdown(Units::PlayerStatsTest)
0.000367 seconds for test_give_1_point_per_point_after_touchdown_made(Units::PlayerStatsTest)
0.000316 seconds for test_awarding_6_points_per_receiving_touchdown(Units::PlayerStatsTest)
0.000305 seconds for test_awarding_0.1_points_per_receiving_yard(Units::PlayerStatsTest)
0.000297 seconds for test_copping_out_and_giving_3_points_per_field_goal(Units::PlayerStatsTest)
0.00029 seconds for test_awarding_6_points_per_rushing_touchdowns(Units::PlayerStatsTest)
0.00029 seconds for test_penalizing_-2_points_for_fumbles_lost(Units::PlayerStatsTest)
0.000288 seconds for test_penalizing_-1_points_for_interceptions(Units::PlayerStatsTest)
0.000282 seconds for test_awarding_0.1_points_per_rushing_yard(Units::PlayerStatsTest)