Module: Minitest::Speed

Defined in:
lib/minitest/speed.rb

Overview

Adds test hooks to verify the time it takes to run the setup, body, and teardown phases of each test. If the time of any phase goes over the maximum time, it fails the test. Use class variables to set the maximum thresholds and crank it down over time.

class SpeedTest < Minitest::Test
  include Minitest::Speed

  @@max_setup_time    = 0.01
  @@max_test_time     = 0.01
  @@max_teardown_time = 0.01
end

class MyTest < SpeedTest
  # ...
end

Constant Summary collapse

VERSION =

:nodoc:

"1.1.0"
@@max_setup_time =

Maximum setup time to pass a speed test. Default to 1.0 second.

1.0
@@max_test_time =

Maximum test time to pass a speed test. Default to 1.0 second.

1.0
@@max_teardown_time =

Maximum teardown time to pass a speed test. Default to 1.0 second.

1.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#clock_timeObject

Default way of getting the current time.

Minitest::Speed.clock_time = proc { Minitest.clock_time }



46
47
48
# File 'lib/minitest/speed.rb', line 46

def clock_time
  @clock_time
end

Instance Method Details

#after_setupObject

:nodoc:



57
58
59
60
61
62
63
64
65
# File 'lib/minitest/speed.rb', line 57

def after_setup # :nodoc:
  delta = Minitest::Speed.clock_time.call - @setup_t0

  @test_t0 = Minitest::Speed.clock_time.call

  assert_operator delta, :<=, @@max_setup_time, "max_setup_time exceeded" unless @permit_slow_setup

  super
end

#after_teardownObject

:nodoc:



77
78
79
80
81
82
83
# File 'lib/minitest/speed.rb', line 77

def after_teardown # :nodoc:
  delta = Minitest::Speed.clock_time.call - @teardown_t0

  assert_operator delta, :<=, @@max_teardown_time, "max_teardown_time exceeded" unless @permit_slow_teardown

  super
end

#before_setupObject

:nodoc:



51
52
53
54
55
# File 'lib/minitest/speed.rb', line 51

def before_setup # :nodoc:
  super

  @setup_t0 = Minitest::Speed.clock_time.call
end

#before_teardownObject

:nodoc:



67
68
69
70
71
72
73
74
75
# File 'lib/minitest/speed.rb', line 67

def before_teardown # :nodoc:
  super

  @teardown_t0 = Minitest::Speed.clock_time.call

  delta = Minitest::Speed.clock_time.call - @test_t0

  assert_operator delta, :<=, @@max_test_time, "max_test_time exceeded" unless @permit_slow_test
end

#permit_slow_setupObject

Disable setup speed assertion for the current setup.

def setup
  permit_slow_setup

  slow_setup_thing

  super
end


96
97
98
# File 'lib/minitest/speed.rb', line 96

def permit_slow_setup
  @permit_slow_setup = true
end

#permit_slow_teardownObject

Disable teardown speed assertion for the current teardown.

def teardown
  permit_slow_teardown

  slow_teardown_thing

  super
end


124
125
126
# File 'lib/minitest/speed.rb', line 124

def permit_slow_teardown
  @permit_slow_teardown = true
end

#permit_slow_testObject

Disable test speed assertion for the current test.

def test_slow_thing
  permit_slow_test

  slow_thing
end


109
110
111
# File 'lib/minitest/speed.rb', line 109

def permit_slow_test
  @permit_slow_test = true
end