mocha 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +11 -15
- data/RELEASE +51 -0
- data/Rakefile +27 -3
- data/TODO +5 -10
- data/lib/auto_mocha.rb +1 -0
- data/lib/mocha.rb +6 -1
- data/lib/mocha/auto_verify.rb +41 -0
- data/lib/smart_test_case.rb +5 -0
- data/lib/smart_test_case/multiple_setup_and_teardown.rb +115 -0
- data/lib/stubba.rb +6 -1
- data/lib/stubba/{stubba.rb → central.rb} +1 -1
- data/lib/stubba/setup_and_teardown.rb +19 -0
- data/test/active_record_test_case.rb +36 -0
- data/test/all_tests.rb +30 -51
- data/test/auto_mock_acceptance_test.rb +0 -1
- data/test/mocha/auto_verify_test.rb +49 -0
- data/test/mocha_acceptance_test.rb +8 -22
- data/test/smart_test_case/multiple_setup_and_teardown_test.rb +91 -0
- data/test/stubba/any_instance_method_test.rb +4 -3
- data/test/stubba/{stubba_test.rb → central_test.rb} +9 -8
- data/test/stubba/class_method_test.rb +1 -2
- data/test/stubba/object_test.rb +29 -44
- data/test/stubba/setup_and_teardown_test.rb +76 -0
- data/test/stubba_integration_test.rb +17 -17
- metadata +13 -7
- data/lib/stubba/test_case.rb +0 -65
- data/test/stubba/test_case_test.rb +0 -41
- data/test/stubba_replacer.rb +0 -13
data/test/all_tests.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'stubba/test_case' # only works if loaded before any derived test cases
|
3
|
-
|
4
1
|
require 'test/unit/ui/console/testrunner'
|
5
2
|
|
6
3
|
require 'mocha/inspect_test'
|
@@ -9,92 +6,74 @@ require 'mocha/expectation_test'
|
|
9
6
|
require 'mocha/infinite_range_test'
|
10
7
|
require 'mocha/mock_methods_test'
|
11
8
|
require 'mocha/mock_test'
|
12
|
-
|
13
|
-
class MochaUnitTests
|
14
|
-
|
15
|
-
def self.suite
|
16
|
-
suite = Test::Unit::TestSuite.new('MochaUnitTests')
|
17
|
-
suite << InspectTest.suite
|
18
|
-
suite << PrettyParametersTest.suite
|
19
|
-
suite << ExpectationTest.suite
|
20
|
-
suite << InfiniteRangeTest.suite
|
21
|
-
suite << MockMethodsTest.suite
|
22
|
-
suite << MockTest.suite
|
23
|
-
suite
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
Test::Unit::UI::Console::TestRunner.run(MochaUnitTests)
|
9
|
+
require 'mocha/auto_verify_test'
|
29
10
|
|
30
11
|
require 'auto_mocha/mock_class_test'
|
31
12
|
require 'auto_mocha/auto_mock_test'
|
32
13
|
|
33
|
-
|
34
|
-
|
35
|
-
def self.suite
|
36
|
-
suite = Test::Unit::TestSuite.new('AutoMochaUnitTests')
|
37
|
-
suite << AutoMockTest.suite
|
38
|
-
suite << MockClassTest.suite
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
Test::Unit::UI::Console::TestRunner.run(AutoMochaUnitTests)
|
44
|
-
|
45
|
-
require 'stubba/stubba_test'
|
14
|
+
require 'stubba/central_test'
|
46
15
|
require 'stubba/class_method_test'
|
47
16
|
require 'stubba/instance_method_test'
|
48
17
|
require 'stubba/any_instance_method_test'
|
49
|
-
require 'stubba/
|
18
|
+
require 'stubba/setup_and_teardown_test'
|
19
|
+
require 'stubba/object_test'
|
20
|
+
|
21
|
+
require 'smart_test_case/multiple_setup_and_teardown_test'
|
50
22
|
|
51
|
-
class
|
23
|
+
class UnitTests
|
52
24
|
|
53
25
|
def self.suite
|
54
|
-
suite = Test::Unit::TestSuite.new('
|
55
|
-
suite <<
|
26
|
+
suite = Test::Unit::TestSuite.new('UnitTests')
|
27
|
+
suite << InspectTest.suite
|
28
|
+
suite << PrettyParametersTest.suite
|
29
|
+
suite << ExpectationTest.suite
|
30
|
+
suite << InfiniteRangeTest.suite
|
31
|
+
suite << MockMethodsTest.suite
|
32
|
+
suite << MockTest.suite
|
33
|
+
suite << AutoVerifyTest.suite
|
34
|
+
suite << MockClassTest.suite
|
35
|
+
suite << AutoMockTest.suite
|
36
|
+
suite << CentralTest.suite
|
56
37
|
suite << ClassMethodTest.suite
|
57
38
|
suite << InstanceMethodTest.suite
|
58
39
|
suite << AnyInstanceMethodTest.suite
|
59
|
-
suite <<
|
40
|
+
suite << SetupAndTeardownTest.suite
|
41
|
+
suite << ObjectTest.suite
|
42
|
+
suite << MultipleSetupAndTeardownTest.suite
|
60
43
|
suite
|
61
44
|
end
|
62
45
|
|
63
46
|
end
|
64
47
|
|
65
|
-
Test::Unit::UI::Console::TestRunner.run(
|
48
|
+
Test::Unit::UI::Console::TestRunner.run(UnitTests)
|
66
49
|
|
67
|
-
require '
|
50
|
+
require 'stubba_integration_test'
|
68
51
|
|
69
|
-
class
|
52
|
+
class IntegrationTests
|
70
53
|
|
71
54
|
def self.suite
|
72
|
-
suite = Test::Unit::TestSuite.new('
|
73
|
-
suite <<
|
74
|
-
suite
|
55
|
+
suite = Test::Unit::TestSuite.new('IntegrationTests')
|
56
|
+
suite << StubbaIntegrationTest.suite
|
75
57
|
end
|
76
58
|
|
77
59
|
end
|
78
60
|
|
79
|
-
Test::Unit::UI::Console::TestRunner.run(
|
80
|
-
|
81
|
-
require 'stubba_integration_test'
|
82
|
-
Test::Unit::UI::Console::TestRunner.run(StubbaIntegrationTest)
|
61
|
+
Test::Unit::UI::Console::TestRunner.run(IntegrationTests)
|
83
62
|
|
84
63
|
require 'mocha_acceptance_test'
|
85
|
-
require 'stubba_acceptance_test'
|
86
64
|
require 'auto_mock_acceptance_test'
|
65
|
+
require 'stubba_acceptance_test'
|
87
66
|
|
88
67
|
class AcceptanceTests
|
89
68
|
|
90
69
|
def self.suite
|
91
70
|
suite = Test::Unit::TestSuite.new('AcceptanceTests')
|
92
71
|
suite << MochaAcceptanceTest.suite
|
93
|
-
suite << StubbaAcceptanceTest.suite
|
94
72
|
suite << AutoMockAcceptanceTest.suite
|
73
|
+
suite << StubbaAcceptanceTest.suite
|
95
74
|
suite
|
96
75
|
end
|
97
76
|
|
98
77
|
end
|
99
78
|
|
100
|
-
Test::Unit::UI::Console::TestRunner.run(AcceptanceTests)
|
79
|
+
Test::Unit::UI::Console::TestRunner.run(AcceptanceTests)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/auto_verify'
|
3
|
+
require 'method_definer'
|
4
|
+
|
5
|
+
class AutoVerifyTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
attr_reader :test_case
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@test_case = Object.new
|
11
|
+
class << test_case
|
12
|
+
def self.add_teardown_method(symbol); end
|
13
|
+
include AutoVerify
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_should_build_mock
|
18
|
+
assert test_case.mock.is_a?(Mocha::Mock)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_build_new_mock_each_time
|
22
|
+
assert_not_equal test_case.mock, test_case.mock
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_store_each_new_mock
|
26
|
+
expected = Array.new(3) { test_case.mock }
|
27
|
+
assert_equal expected, test_case.mocks
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_verify_each_mock_on_teardown
|
31
|
+
mocks = Array.new(3) do
|
32
|
+
mock = Object.new
|
33
|
+
mock.define_instance_accessor(:verify_called)
|
34
|
+
mock.define_instance_method(:verify) { self.verify_called = true }
|
35
|
+
mock
|
36
|
+
end
|
37
|
+
test_case.replace_instance_method(:mocks) { mocks }
|
38
|
+
test_case.teardown_mocks
|
39
|
+
assert mocks.all? { |mock| mock.verify_called }
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_reset_mocks_on_teardown
|
43
|
+
mock = Class.new { define_method(:verify) {} }.new
|
44
|
+
test_case.mocks << mock
|
45
|
+
test_case.teardown_mocks
|
46
|
+
assert test_case.mocks.empty?
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -35,11 +35,9 @@ class MochaAcceptanceTest < Test::Unit::TestCase
|
|
35
35
|
|
36
36
|
end
|
37
37
|
|
38
|
-
include Mocha
|
39
|
-
|
40
38
|
def test_should_move_both_tracks_forward_ten_steps
|
41
|
-
left_track =
|
42
|
-
right_track =
|
39
|
+
left_track = mock()
|
40
|
+
right_track = mock()
|
43
41
|
steps_per_metre = 5
|
44
42
|
rover = Rover.new(left_track, right_track, steps_per_metre, nil)
|
45
43
|
|
@@ -50,14 +48,11 @@ class MochaAcceptanceTest < Test::Unit::TestCase
|
|
50
48
|
right_track.stubs(:moving?).returns(false)
|
51
49
|
|
52
50
|
rover.forward(2)
|
53
|
-
|
54
|
-
left_track.verify
|
55
|
-
right_track.verify
|
56
51
|
end
|
57
52
|
|
58
53
|
def test_should_move_both_tracks_backward_ten_steps
|
59
|
-
left_track =
|
60
|
-
right_track =
|
54
|
+
left_track = mock()
|
55
|
+
right_track = mock()
|
61
56
|
steps_per_metre = 5
|
62
57
|
rover = Rover.new(left_track, right_track, steps_per_metre, nil)
|
63
58
|
|
@@ -68,14 +63,11 @@ class MochaAcceptanceTest < Test::Unit::TestCase
|
|
68
63
|
right_track.stubs(:moving?).returns(false)
|
69
64
|
|
70
65
|
rover.backward(2)
|
71
|
-
|
72
|
-
left_track.verify
|
73
|
-
right_track.verify
|
74
66
|
end
|
75
67
|
|
76
68
|
def test_should_move_left_track_forwards_five_steps_and_right_track_backwards_five_steps
|
77
|
-
left_track =
|
78
|
-
right_track =
|
69
|
+
left_track = mock()
|
70
|
+
right_track = mock()
|
79
71
|
steps_per_degree = 5.0 / 90.0
|
80
72
|
rover = Rover.new(left_track, right_track, nil, steps_per_degree)
|
81
73
|
|
@@ -86,14 +78,11 @@ class MochaAcceptanceTest < Test::Unit::TestCase
|
|
86
78
|
right_track.stubs(:moving?).returns(false)
|
87
79
|
|
88
80
|
rover.right(90)
|
89
|
-
|
90
|
-
left_track.verify
|
91
|
-
right_track.verify
|
92
81
|
end
|
93
82
|
|
94
83
|
def test_should_move_left_track_backwards_five_steps_and_right_track_forwards_five_steps
|
95
|
-
left_track =
|
96
|
-
right_track =
|
84
|
+
left_track = mock()
|
85
|
+
right_track = mock()
|
97
86
|
steps_per_degree = 5.0 / 90.0
|
98
87
|
rover = Rover.new(left_track, right_track, nil, steps_per_degree)
|
99
88
|
|
@@ -104,9 +93,6 @@ class MochaAcceptanceTest < Test::Unit::TestCase
|
|
104
93
|
right_track.stubs(:moving?).returns(false)
|
105
94
|
|
106
95
|
rover.left(90)
|
107
|
-
|
108
|
-
left_track.verify
|
109
|
-
right_track.verify
|
110
96
|
end
|
111
97
|
|
112
98
|
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'smart_test_case/multiple_setup_and_teardown'
|
3
|
+
require 'active_record_test_case'
|
4
|
+
|
5
|
+
class MultipleSetupAndTeardownTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_1
|
8
|
+
test_case = Class.new(Test::Unit::TestCase) do
|
9
|
+
define_method(:methods_called) { @methods_called ||= [] }
|
10
|
+
include MultipleSetupAndTeardown
|
11
|
+
add_setup_method(:setup_1)
|
12
|
+
define_method(:setup_1) { methods_called << :setup_1 }
|
13
|
+
define_method(:test_me) { methods_called << :test_me }
|
14
|
+
end
|
15
|
+
test = test_case.new(:test_me)
|
16
|
+
test_result = Test::Unit::TestResult.new
|
17
|
+
test.run(test_result) {}
|
18
|
+
assert test_result.passed?
|
19
|
+
assert_equal [:setup_1, :test_me], test.methods_called
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_2
|
23
|
+
test_case = Class.new(Test::Unit::TestCase) do
|
24
|
+
define_method(:methods_called) { @methods_called ||= [] }
|
25
|
+
define_method(:setup) { methods_called << :setup }
|
26
|
+
include MultipleSetupAndTeardown
|
27
|
+
add_setup_method(:setup_1)
|
28
|
+
define_method(:setup_1) { methods_called << :setup_1 }
|
29
|
+
define_method(:test_me) { methods_called << :test_me }
|
30
|
+
end
|
31
|
+
test = test_case.new(:test_me)
|
32
|
+
test_result = Test::Unit::TestResult.new
|
33
|
+
test.run(test_result) {}
|
34
|
+
assert test_result.passed?
|
35
|
+
assert_equal [:setup, :setup_1, :test_me], test.methods_called
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_3
|
39
|
+
test_case = Class.new(Test::Unit::TestCase) do
|
40
|
+
define_method(:methods_called) { @methods_called ||= [] }
|
41
|
+
include MultipleSetupAndTeardown
|
42
|
+
define_method(:setup) { methods_called << :setup }
|
43
|
+
add_setup_method(:setup_1)
|
44
|
+
define_method(:setup_1) { methods_called << :setup_1 }
|
45
|
+
define_method(:test_me) { methods_called << :test_me }
|
46
|
+
end
|
47
|
+
test = test_case.new(:test_me)
|
48
|
+
test_result = Test::Unit::TestResult.new
|
49
|
+
test.run(test_result) {}
|
50
|
+
assert test_result.passed?
|
51
|
+
assert_equal [:setup_1, :setup, :test_me], test.methods_called
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_4
|
55
|
+
test_case = Class.new(Test::Unit::TestCase) do
|
56
|
+
define_method(:methods_called) { @methods_called ||= [] }
|
57
|
+
include MultipleSetupAndTeardown
|
58
|
+
add_setup_method(:setup_1)
|
59
|
+
define_method(:setup_1) { methods_called << :setup_1 }
|
60
|
+
end
|
61
|
+
derived_test_case = Class.new(test_case) do
|
62
|
+
define_method(:setup) { methods_called << :setup }
|
63
|
+
define_method(:test_me) { methods_called << :test_me }
|
64
|
+
end
|
65
|
+
test = derived_test_case.new(:test_me)
|
66
|
+
test_result = Test::Unit::TestResult.new
|
67
|
+
test.run(test_result) {}
|
68
|
+
assert test_result.passed?
|
69
|
+
assert_equal [:setup_1, :setup, :test_me], test.methods_called
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_5
|
73
|
+
test_case = Class.new(Test::Unit::TestCase) do
|
74
|
+
define_method(:methods_called) { @methods_called ||= [] }
|
75
|
+
include ActiveRecordTestCase
|
76
|
+
include MultipleSetupAndTeardown
|
77
|
+
add_setup_method(:setup_1)
|
78
|
+
define_method(:setup_1) { methods_called << :setup_1 }
|
79
|
+
end
|
80
|
+
derived_test_case = Class.new(test_case) do
|
81
|
+
define_method(:setup) { methods_called << :setup }
|
82
|
+
define_method(:test_me) { methods_called << :test_me }
|
83
|
+
end
|
84
|
+
test = derived_test_case.new(:test_me)
|
85
|
+
test_result = Test::Unit::TestResult.new
|
86
|
+
test.run(test_result) {}
|
87
|
+
assert test_result.passed?
|
88
|
+
assert_equal [:setup_with_fixtures, :setup_1, :setup, :test_me, :teardown_with_fixtures], test.methods_called
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -34,7 +34,8 @@ class AnyInstanceMethodTest < Test::Unit::TestCase
|
|
34
34
|
method = AnyInstanceMethod.new(klass, :method_x)
|
35
35
|
mocha = Mock.new
|
36
36
|
mocha.expects(:method_x).with(:param1, :param2).returns(:result)
|
37
|
-
any_instance =
|
37
|
+
any_instance = Object.new
|
38
|
+
any_instance.define_instance_method(:mocha) { mocha }
|
38
39
|
klass.define_instance_method(:any_instance) { any_instance }
|
39
40
|
|
40
41
|
method.define_new_method
|
@@ -99,7 +100,7 @@ class AnyInstanceMethodTest < Test::Unit::TestCase
|
|
99
100
|
|
100
101
|
def test_should_call_reset_mocha
|
101
102
|
klass = Class.new { def method_x; end }
|
102
|
-
any_instance =
|
103
|
+
any_instance = Class.new { attr_accessor :mocha_was_reset; def reset_mocha; self.mocha_was_reset = true; end }.new
|
103
104
|
klass.define_instance_method(:any_instance) { any_instance }
|
104
105
|
method = AnyInstanceMethod.new(klass, :method_x)
|
105
106
|
method.replace_instance_method(:remove_new_method) { }
|
@@ -107,7 +108,7 @@ class AnyInstanceMethodTest < Test::Unit::TestCase
|
|
107
108
|
|
108
109
|
method.unstub
|
109
110
|
|
110
|
-
any_instance.
|
111
|
+
assert any_instance.mocha_was_reset
|
111
112
|
end
|
112
113
|
|
113
114
|
end
|
@@ -1,14 +1,15 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
-
|
2
|
+
|
3
|
+
require 'stubba/central'
|
3
4
|
require 'mocha/mock'
|
4
5
|
|
5
|
-
class
|
6
|
+
class CentralTest < Test::Unit::TestCase
|
6
7
|
|
7
|
-
include Stubba
|
8
8
|
include Mocha
|
9
|
+
include Stubba
|
9
10
|
|
10
11
|
def test_should_start_with_empty_stubba_methods
|
11
|
-
stubba =
|
12
|
+
stubba = Central.new
|
12
13
|
|
13
14
|
assert_equal [], stubba.stubba_methods
|
14
15
|
end
|
@@ -16,7 +17,7 @@ class StubbaTest < Test::Unit::TestCase
|
|
16
17
|
def test_should_stub_method_if_not_already_stubbed
|
17
18
|
method = Mock.new
|
18
19
|
method.expects(:stub)
|
19
|
-
stubba =
|
20
|
+
stubba = Central.new
|
20
21
|
|
21
22
|
stubba.stub(method)
|
22
23
|
|
@@ -26,7 +27,7 @@ class StubbaTest < Test::Unit::TestCase
|
|
26
27
|
def test_should_not_stub_method_if_already_stubbed
|
27
28
|
method = Mock.new
|
28
29
|
method.expects(:stub).times(0)
|
29
|
-
stubba =
|
30
|
+
stubba = Central.new
|
30
31
|
stubba_methods = Mock.new
|
31
32
|
stubba_methods.stubs(:include?).with(method).returns(true)
|
32
33
|
stubba.stubba_methods = stubba_methods
|
@@ -39,7 +40,7 @@ class StubbaTest < Test::Unit::TestCase
|
|
39
40
|
def test_should_record_method
|
40
41
|
method = Mock.new
|
41
42
|
method.expects(:stub)
|
42
|
-
stubba =
|
43
|
+
stubba = Central.new
|
43
44
|
|
44
45
|
stubba.stub(method)
|
45
46
|
|
@@ -47,7 +48,7 @@ class StubbaTest < Test::Unit::TestCase
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def test_should_unstub_all_methods
|
50
|
-
stubba =
|
51
|
+
stubba = Central.new
|
51
52
|
method_1 = Mock.new(:unstub => nil)
|
52
53
|
method_2 = Mock.new(:unstub => nil)
|
53
54
|
stubba.stubba_methods = [method_1, method_2]
|
@@ -7,7 +7,6 @@ require 'stubba/class_method'
|
|
7
7
|
class ClassMethodTest < Test::Unit::TestCase
|
8
8
|
|
9
9
|
include Stubba
|
10
|
-
include Mocha
|
11
10
|
|
12
11
|
def test_should_provide_hidden_version_of_method_name
|
13
12
|
method = ClassMethod.new(nil, :original_method_name)
|
@@ -46,7 +45,7 @@ class ClassMethodTest < Test::Unit::TestCase
|
|
46
45
|
|
47
46
|
def test_should_define_a_new_method_which_should_call_mocha_method_missing
|
48
47
|
klass = Class.new { def self.method_x; end }
|
49
|
-
mocha = Mock.new
|
48
|
+
mocha = Mocha::Mock.new
|
50
49
|
klass.define_instance_method(:mocha) { mocha }
|
51
50
|
mocha.expects(:method_x).with(:param1, :param2).returns(:result)
|
52
51
|
method = ClassMethod.new(klass, :method_x)
|