flexmock 1.3.3 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.autotest +3 -0
  3. data/.gitignore +14 -0
  4. data/.togglerc +7 -0
  5. data/.travis.yml +5 -0
  6. data/.yardopts +2 -0
  7. data/CHANGES +11 -0
  8. data/Gemfile +1 -4
  9. data/README.md +39 -11
  10. data/Rakefile +6 -217
  11. data/doc/examples/rspec_examples_spec.rb +244 -0
  12. data/doc/examples/test_unit_examples_test.rb +240 -0
  13. data/doc/jamis.rb +591 -0
  14. data/flexmock.gemspec +33 -0
  15. data/lib/flexmock.rb +0 -1
  16. data/lib/flexmock/composite_expectation.rb +1 -1
  17. data/lib/flexmock/core.rb +3 -7
  18. data/lib/flexmock/core_class_methods.rb +5 -1
  19. data/lib/flexmock/default_framework_adapter.rb +2 -2
  20. data/lib/flexmock/expectation.rb +29 -3
  21. data/lib/flexmock/expectation_director.rb +1 -1
  22. data/lib/flexmock/minitest.rb +13 -0
  23. data/lib/flexmock/minitest_extensions.rb +26 -0
  24. data/lib/flexmock/minitest_integration.rb +111 -0
  25. data/lib/flexmock/mock_container.rb +1 -2
  26. data/lib/flexmock/partial_mock.rb +61 -104
  27. data/lib/flexmock/recorder.rb +1 -2
  28. data/lib/flexmock/rspec.rb +6 -3
  29. data/lib/flexmock/test_unit_integration.rb +14 -0
  30. data/lib/flexmock/validators.rb +5 -4
  31. data/lib/flexmock/version.rb +1 -9
  32. data/rakelib/metrics.rake +40 -0
  33. data/rakelib/preview.rake +4 -0
  34. data/rakelib/tags.rake +18 -0
  35. data/todo.txt +20 -0
  36. metadata +61 -86
  37. data/Gemfile.lock +0 -20
  38. data/doc/examples/rspec_examples_spec.rdoc +0 -245
  39. data/doc/examples/test_unit_examples_test.rdoc +0 -241
  40. data/test/aliasing_test.rb +0 -66
  41. data/test/assert_spy_called_test.rb +0 -119
  42. data/test/base_class_test.rb +0 -71
  43. data/test/based_partials_test.rb +0 -51
  44. data/test/container_methods_test.rb +0 -118
  45. data/test/default_framework_adapter_test.rb +0 -38
  46. data/test/demeter_mocking_test.rb +0 -191
  47. data/test/deprecated_methods_test.rb +0 -225
  48. data/test/examples_from_readme_test.rb +0 -157
  49. data/test/expectation_description_test.rb +0 -80
  50. data/test/extended_should_receive_test.rb +0 -69
  51. data/test/flexmodel_test.rb +0 -54
  52. data/test/mock_builder_test.rb +0 -68
  53. data/test/naming_test.rb +0 -84
  54. data/test/new_instances_test.rb +0 -215
  55. data/test/object_extensions_test.rb +0 -25
  56. data/test/partial_mock_test.rb +0 -458
  57. data/test/record_mode_test.rb +0 -158
  58. data/test/redirect_error.rb +0 -16
  59. data/test/rspec_integration/integration_spec.rb +0 -56
  60. data/test/rspec_integration/spy_example_spec.rb +0 -207
  61. data/test/samples_test.rb +0 -283
  62. data/test/should_ignore_missing_test.rb +0 -84
  63. data/test/should_receive_test.rb +0 -1155
  64. data/test/spys_test.rb +0 -215
  65. data/test/symbol_extensions_test.rb +0 -8
  66. data/test/test_class_extensions.rb +0 -34
  67. data/test/test_setup.rb +0 -92
  68. data/test/test_unit_integration/auto_test_unit_test.rb +0 -42
  69. data/test/test_unit_integration/minitest_teardown_test.rb +0 -14
  70. data/test/tu_integration_test.rb +0 -99
  71. data/test/undefined_test.rb +0 -87
@@ -1,158 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- #---
4
- # Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
5
- # All rights reserved.
6
-
7
- # Permission is granted for use, copying, modification, distribution,
8
- # and distribution of modified versions of this work as long as the
9
- # above copyright notice is included.
10
- #+++
11
-
12
- require 'test/test_setup'
13
-
14
- class TestRecordMode < Test::Unit::TestCase
15
- include FlexMock::TestCase
16
-
17
- def test_recording_mode_works
18
- mock = flexmock("mock")
19
- mock.should_expect do |recorder|
20
- recorder.f { :answer }
21
- end
22
- assert_equal :answer, mock.f
23
- end
24
-
25
- def test_arguments_are_passed_to_recording_mode_block
26
- mock = flexmock("mock")
27
- mock.should_expect do |recorder|
28
- recorder.f(:arg) do |arg|
29
- assert_equal :arg, arg
30
- :answer
31
- end
32
- end
33
- assert_equal :answer, mock.f(:arg)
34
- end
35
-
36
- def test_recording_mode_handles_multiple_returns
37
- FlexMock.use("mock") do |mock|
38
- mock.should_expect do |r|
39
- answers = [1, 2]
40
- # HACK: The following lambda is needed in Ruby 1.9 to cause
41
- # the answers to be properly bound in the following block.
42
- lambda { }
43
- r.f { answers.shift }
44
- end
45
- assert_equal 1, mock.f
46
- assert_equal 2, mock.f
47
- end
48
- end
49
-
50
- def test_recording_mode_does_not_specify_order
51
- FlexMock.use("mock") do |mock|
52
- mock.should_expect do |r|
53
- r.f { 1 }
54
- r.g { 2 }
55
- end
56
- assert_equal 2, mock.g
57
- assert_equal 1, mock.f
58
- end
59
- end
60
-
61
- def test_recording_mode_gets_block_args_too
62
- mock = flexmock("mock")
63
- mock.should_expect do |r|
64
- r.f(1, Proc) { |arg, block|
65
- assert_not_nil block
66
- block.call
67
- }
68
- end
69
-
70
- assert_equal :block_result, mock.f(1) { :block_result }
71
- end
72
-
73
- def test_recording_mode_should_validate_args_with_equals
74
- assert_mock_failure(:deep => true, :line => __LINE__+5) do
75
- FlexMock.use("mock") do |mock|
76
- mock.should_expect do |r|
77
- r.f(1)
78
- end
79
- mock.f(2)
80
- end
81
- end
82
- end
83
-
84
- def test_recording_mode_should_allow_arg_contraint_validation
85
- assert_mock_failure(:deep => true, :line => __LINE__+5) do
86
- FlexMock.use("mock") do |mock|
87
- mock.should_expect do |r|
88
- r.f(1)
89
- end
90
- mock.f(2)
91
- end
92
- end
93
- end
94
-
95
- def test_recording_mode_should_handle_multiplicity_contraints
96
- assert_mock_failure(:line => __LINE__+3) do
97
- FlexMock.use("mock") do |mock|
98
- mock.should_expect do |r|
99
- r.f { :result }.once
100
- end
101
- mock.f
102
- mock.f
103
- end
104
- end
105
- end
106
-
107
- def test_strict_record_mode_requires_exact_argument_matches
108
- assert_mock_failure(:deep => true, :line => __LINE__+6) do
109
- FlexMock.use("mock") do |mock|
110
- mock.should_expect do |rec|
111
- rec.should_be_strict
112
- rec.f(Integer)
113
- end
114
- mock.f(3)
115
- end
116
- end
117
- end
118
-
119
- def test_strict_record_mode_requires_exact_ordering
120
- assert_mock_failure(:deep => true, :line => __LINE__+8) do
121
- FlexMock.use("mock") do |mock|
122
- mock.should_expect do |rec|
123
- rec.should_be_strict
124
- rec.f(1)
125
- rec.f(2)
126
- end
127
- mock.f(2)
128
- mock.f(1)
129
- end
130
- end
131
- end
132
-
133
- def test_strict_record_mode_requires_once
134
- assert_mock_failure(:deep => true, :line => __LINE__+4) do
135
- FlexMock.use("mock") do |mock|
136
- mock.should_expect do |rec|
137
- rec.should_be_strict
138
- rec.f(1)
139
- end
140
- mock.f(1)
141
- mock.f(1)
142
- end
143
- end
144
- end
145
-
146
- def test_strict_record_mode_can_not_fail
147
- FlexMock.use("mock") do |mock|
148
- mock.should_expect do |rec|
149
- rec.should_be_strict
150
- rec.f(Integer)
151
- rec.f(2)
152
- end
153
- mock.f(Integer)
154
- mock.f(2)
155
- end
156
- end
157
-
158
- end
@@ -1,16 +0,0 @@
1
- require 'stringio'
2
-
3
- class FlexMock
4
- module RedirectError
5
- def redirect_error
6
- require 'stringio'
7
- old_err = $stderr
8
- $stderr = StringIO.new
9
- yield
10
- $stderr.string
11
- ensure
12
- $stderr = old_err
13
- end
14
- private :redirect_error
15
- end
16
- end
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- #---
4
- # Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
5
- # All rights reserved.
6
-
7
- # Permission is granted for use, copying, modification, distribution,
8
- # and distribution of modified versions of this work as long as the
9
- # above copyright notice is included.
10
- #+++
11
-
12
- if defined?(RSpec)
13
- RSpec.configure do |config|
14
- config.mock_with :flexmock
15
- end
16
- else
17
- Spec::Runner.configure do |config|
18
- config.mock_with :flexmock
19
- end
20
- end
21
-
22
- describe "FlexMock in a RSpec example" do
23
- specify "should be able to create a mock" do
24
- m = flexmock()
25
- end
26
-
27
- specify "should have an error when a mock is not called" do
28
- m = flexmock("Expectation Failured")
29
- m.should_receive(:hi).with().once
30
- lambda {
31
- flexmock_verify
32
- }.should raise_error(RSpec::Expectations::ExpectationNotMetError, /\bhi\b.*incorrect.*times/i)
33
- end
34
-
35
- specify "should be able to create a stub" do
36
- s = "Hello World"
37
- flexmock(:base, s).should_receive(:downcase).with().once.and_return("hello WORLD")
38
-
39
- s.downcase.should == "hello WORLD"
40
- end
41
-
42
- specify "Should show an example failure" do
43
- lambda {
44
- 1.should == 2
45
- }.should raise_error(RSpec::Expectations::ExpectationNotMetError,
46
- /expected: 2.*got: 1/m)
47
- end
48
-
49
- specify "Should show how mocks are displayed in error messages" do
50
- m = flexmock("x")
51
- lambda {
52
- m.should == 2
53
- }.should raise_error(RSpec::Expectations::ExpectationNotMetError, /got: <FlexMock:x>/)
54
- end
55
-
56
- end
@@ -1,207 +0,0 @@
1
- require 'flexmock/rspec'
2
-
3
- RSpec.configure do |config|
4
- config.mock_with :flexmock
5
- end
6
-
7
- describe "Dog" do
8
- class Dog
9
- def wags(arg)
10
- fail "SHOULD NOT BE CALLED"
11
- end
12
-
13
- def barks
14
- fail "SHOULD NOT BE CALLED"
15
- end
16
- end
17
-
18
- let(:dog) { flexmock(:on, Dog) }
19
-
20
- context "single calls with arguments" do
21
- before do
22
- dog.wags(:tail)
23
- end
24
-
25
- it "accepts no with" do
26
- dog.should have_received(:wags)
27
- end
28
-
29
- it "accepts with restriction" do
30
- dog.should have_received(:wags).with(:tail)
31
- end
32
-
33
- it "accepts not methods called" do
34
- dog.should_not have_received(:bark)
35
- end
36
-
37
- it "rejects incorrect with restriction" do
38
- should_fail(/^expected wag\(:foot\) to be received by <FlexMock:Dog Mock>/i) do
39
- dog.should have_received(:wag).with(:foot)
40
- end
41
- end
42
-
43
- it "rejects not on correct matcher" do
44
- should_fail(/^expected wags\(:tail\) to NOT be received by <FlexMock:Dog Mock>/i) do
45
- dog.should_not have_received(:wags).with(:tail)
46
- end
47
- end
48
- end
49
-
50
- context "multiple calls with multiple arguments" do
51
- before do
52
- dog.wags(:tail)
53
- dog.wags(:tail)
54
- dog.wags(:tail)
55
- dog.wags(:head, :tail)
56
- dog.barks
57
- dog.barks
58
- end
59
-
60
- it "accepts wags(:tail) multiple times" do
61
- dog.should have_received(:wags).with(:tail).times(3)
62
- end
63
-
64
- it "rejects wags(:tail) wrong times value" do
65
- should_fail(/^expected wags\(:tail\) to be received by <FlexMock:Dog Mock>/i) do
66
- dog.should have_received(:wags).with(:tail).times(2)
67
- end
68
- end
69
-
70
- it "detects any_args" do
71
- dog.should have_received(:wags).times(4)
72
- end
73
-
74
- it "accepts once" do
75
- dog.should have_received(:wags).with(:head, :tail).once
76
- end
77
-
78
- it "rejects an incorrect once" do
79
- should_fail(/^expected wags\(:tail\) to be received by <FlexMock:Dog Mock> once/i) do
80
- dog.should have_received(:wags).with(:tail).once
81
- end
82
- end
83
-
84
- it "accepts twice" do
85
- dog.should have_received(:barks).twice
86
- end
87
-
88
- it "rejects an incorrect twice" do
89
- should_fail(/^expected wags\(:tail\) to be received by <FlexMock:Dog Mock> twice/) do
90
- dog.should have_received(:wags).with(:tail).twice
91
- end
92
- end
93
-
94
- it "accepts never" do
95
- dog.should have_received(:jump).never
96
- end
97
-
98
- it "rejects an incorrect never" do
99
- should_fail(/^expected barks\(\) to be received by <FlexMock:Dog Mock> never/i) do
100
- dog.should have_received(:barks).with().never
101
- end
102
- end
103
-
104
- it "rejects an incorrect never" do
105
- dog.should_not have_received(:jump)
106
- end
107
- end
108
-
109
- context "with additional validations" do
110
- it "accepts when correct" do
111
- dog.wags(:tail)
112
- dog.should have_received(:wags).and { |arg| arg.should == :tail }
113
- end
114
-
115
- it "rejects when incorrect" do
116
- dog.wags(:tail)
117
- should_fail(/expected: :foot.*got: :tail/im) do
118
- dog.should have_received(:wags).and { |arg| arg.should == :foot }
119
- end
120
- end
121
-
122
- it "rejects on all calls" do
123
- dog.wags(:foot)
124
- dog.wags(:foot)
125
- dog.wags(:tail)
126
- should_fail(/expected: :foot.*got: :tail/im) do
127
- dog.should have_received(:wags).and { |arg| arg.should == :foot }
128
- end
129
- end
130
-
131
- it "runs the first additional block" do
132
- dog.wags(:tail)
133
- should_fail(/expected: :foot.*got: :tail/im) do
134
- dog.should have_received(:wags).and { |args|
135
- args.should == :foot
136
- }.and { |args|
137
- args.should == :tail
138
- }
139
- end
140
- end
141
-
142
- it "runs the second additional block" do
143
- dog.wags(:tail)
144
- should_fail(/expected: :foot.*got: :tail/im) do
145
- dog.should have_received(:wags).and { |args|
146
- args.should == :tail
147
- }.and { |args|
148
- args.should == :foot
149
- }
150
- end
151
- end
152
- end
153
-
154
- context "with ordinal constraints" do
155
- it "detects the first call" do
156
- dog.wags(:tail)
157
- dog.wags(:foot)
158
- dog.should have_received(:wags).and { |arg| arg.should == :tail }.on(1)
159
- end
160
-
161
- it "detects the second call" do
162
- dog.wags(:tail)
163
- dog.wags(:foot)
164
- dog.should have_received(:wags).and { |arg| arg.should == :foot }.on(2)
165
- end
166
- end
167
-
168
- context "with blocks" do
169
- before do
170
- dog.wags { }
171
- dog.barks
172
- end
173
-
174
- it "accepts wags with a block" do
175
- dog.should have_received(:wags).with_a_block
176
- dog.should have_received(:wags)
177
- end
178
-
179
- it "accepts barks without a block" do
180
- dog.should have_received(:barks).without_a_block
181
- dog.should have_received(:barks)
182
- end
183
-
184
- it "rejects wags without a block" do
185
- should_fail(/without a block/) do
186
- dog.should have_received(:wags).without_a_block
187
- end
188
- end
189
-
190
- it "rejects barks with a block" do
191
- should_fail(/with a block/) do
192
- dog.should have_received(:barks).with_a_block
193
- end
194
- end
195
- end
196
-
197
- def should_fail(message_pattern)
198
- failed = false
199
- begin
200
- yield
201
- rescue RSpec::Expectations::ExpectationNotMetError => ex
202
- failed = true
203
- ex.message.should match(message_pattern)
204
- end
205
- RSpec::Expectations.fail_with "Expected block to fail with message #{message_pattern.inspect}, no failure detected" unless failed
206
- end
207
- end
data/test/samples_test.rb DELETED
@@ -1,283 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- #---
4
- # Copyright 2003-2013 by Jim Weirich (jim.weirich@gmail.com).
5
- # All rights reserved.
6
-
7
- # Permission is granted for use, copying, modification, distribution,
8
- # and distribution of modified versions of this work as long as the
9
- # above copyright notice is included.
10
- #+++
11
-
12
- require 'test/test_setup'
13
-
14
- # Sample FlexMock Usage.
15
-
16
- class TestSamples < Test::Unit::TestCase
17
- include FlexMock::TestCase
18
-
19
- # This is a basic example where we setup a mock object to mimic an
20
- # IO object. We know that the +count_lines+ method uses gets, so we
21
- # tell the mock object to handle +gets+ by returning successive
22
- # elements of an array (just as the real +gets+ returns successive
23
- # elements of a file.
24
- def test_file_io
25
- mock_file = flexmock("file")
26
- mock_file.should_receive(:gets).and_return("line 1", "line 2", nil)
27
- assert_equal 2, count_lines(mock_file)
28
- end
29
-
30
- # Count the number of lines in a file. Used in the test_file_io
31
- # test.
32
- def count_lines(file)
33
- n = 0
34
- while file.gets
35
- n += 1
36
- end
37
- n
38
- end
39
- end
40
-
41
-
42
- class TestUndefined < Test::Unit::TestCase
43
- include FlexMock::TestCase
44
-
45
- def test_undefined_values
46
- m = flexmock("mock")
47
- m.should_receive(:divide_by).with(0).
48
- and_return_undefined
49
- assert_equal FlexMock.undefined, m.divide_by(0)
50
- end
51
- end
52
-
53
-
54
- class TestSimple < Test::Unit::TestCase
55
- include FlexMock::TestCase
56
-
57
- def test_simple_mock
58
- m = flexmock(:pi => 3.1416, :e => 2.71)
59
- assert_equal 3.1416, m.pi
60
- assert_equal 2.71, m.e
61
- end
62
- end
63
-
64
- class TestDog < Test::Unit::TestCase
65
- include FlexMock::TestCase
66
-
67
- def test_dog_wags
68
- tail_mock = flexmock(:wag => :happy)
69
- assert_equal :happy, tail_mock.wag
70
- end
71
- end
72
-
73
- class Woofer
74
- end
75
-
76
- class Dog
77
- def initialize
78
- @woofer = Woofer.new
79
- end
80
- def bark
81
- @woofer.woof
82
- end
83
- def wag
84
- :happy
85
- end
86
- end
87
-
88
- class TestDogBarking < Test::Unit::TestCase
89
- include FlexMock::TestCase
90
-
91
- # Setup the tests by mocking the +new+ method of
92
- # Woofer and return a mock woofer.
93
- def setup
94
- @dog = Dog.new
95
- flexmock(@dog, :bark => :grrr)
96
- end
97
-
98
- def test_dog
99
- assert_equal :grrr, @dog.bark # Mocked Method
100
- assert_equal :happy, @dog.wag # Normal Method
101
- end
102
- end
103
-
104
- class TestDogBarkingWithNewInstances < Test::Unit::TestCase
105
- include FlexMock::TestCase
106
-
107
- # Setup the tests by mocking Woofer to always
108
- # return partial mocks.
109
- def setup
110
- flexmock(Woofer).new_instances.should_receive(:woof => :grrr)
111
- end
112
-
113
- def test_dog
114
- assert_equal :grrr, Dog.new.bark # All dog objects
115
- assert_equal :grrr, Dog.new.bark # are mocked.
116
- end
117
- end
118
-
119
- class TestDefaults < Test::Unit::TestCase
120
- include FlexMock::TestCase
121
-
122
- def setup
123
- @mock_dog = flexmock("Fido")
124
- @mock_dog.should_receive(:tail => :a_tail, :bark => "woof").by_default
125
- end
126
-
127
- def test_something_where_bark_must_be_called_once
128
- @mock_dog.should_receive(:bark => "bow wow").once
129
- assert_equal "bow wow", @mock_dog.bark
130
- assert_equal :a_tail, @mock_dog.tail
131
- end
132
- end
133
-
134
- class TestDemeter < Test::Unit::TestCase
135
- include FlexMock::TestCase
136
- def test_manual_mocking
137
- # Manually mocking a Law of Demeter violation
138
- cog = flexmock("cog")
139
- cog.should_receive(:turn).once.and_return(:ok)
140
- joint = flexmock("gear", :cog => cog)
141
- axle = flexmock("axle", :universal_joint => joint)
142
- chassis = flexmock("chassis", :axle => axle)
143
- car = flexmock("car", :chassis => chassis)
144
-
145
- # test code
146
- assert_equal :ok, car.chassis.axle.universal_joint.cog.turn
147
- end
148
-
149
- def test_demeter
150
- car = flexmock("car")
151
- car.should_receive( "chassis.axle.universal_joint.cog.turn" => :ok).once
152
-
153
- # Test code
154
- assert_equal :ok, car.chassis.axle.universal_joint.cog.turn
155
- end
156
-
157
- end
158
-
159
- class TestDb < Test::Unit::TestCase
160
- include FlexMock::TestCase
161
-
162
- def test_db
163
- db = flexmock('db')
164
- db.should_receive(:query).and_return([1,2,3])
165
- db.should_receive(:update).with(5).and_return(nil).once
166
-
167
- # test code
168
- assert_nil db.update(5)
169
- end
170
- end
171
-
172
-
173
- class TestDb < Test::Unit::TestCase
174
- include FlexMock::TestCase
175
-
176
- def test_query_and_update
177
- db = flexmock('db')
178
- db.should_receive(:query).and_return([1,2,3]).ordered
179
- db.should_receive(:update).and_return(nil).ordered
180
- # test code here
181
- assert_raises(assertion_failed_error) do
182
- db.update
183
- db.query
184
- end
185
- end
186
-
187
- def test_ordered_queries
188
- db = flexmock('db')
189
- db.should_receive(:startup).once.ordered
190
- db.should_receive(:query).with("CPWR").and_return(12.3).
191
- once.ordered(:queries)
192
- db.should_receive(:query).with("MSFT").and_return(10.0).
193
- once.ordered(:queries)
194
- db.should_receive(:query).with(/^....$/).and_return(3.3).
195
- at_least.once.ordered(:queries)
196
- db.should_receive(:finish).once.ordered
197
- # test code here
198
- db.startup
199
- db.query("CPWR")
200
- db.query("MSFT")
201
- db.query("asdf")
202
- db.finish
203
- end
204
-
205
- def test_ordered_queries_in_record_mode
206
- db = flexmock('db')
207
- db.should_expect do |rec|
208
- rec.startup.once.ordered
209
- rec.query("CPWR") { 12.3 }.once.ordered(:queries)
210
- rec.query("MSFT") { 10.0 }.once.ordered(:queries)
211
- rec.query(/^....$/) { 3.3 }.at_least.once.ordered(:queries)
212
- rec.finish.once.ordered
213
- end
214
- # test code here using +db+.
215
- db.startup
216
- db.query("CPWR")
217
- db.query("MSFT")
218
- db.query("asdf")
219
- db.finish
220
- end
221
-
222
- def known_good_way_to_build_xml(builder)
223
- builder.html
224
- end
225
-
226
- def new_way_to_build_xml(builder)
227
- known_good_way_to_build_xml(builder)
228
- end
229
-
230
- def test_build_xml
231
- builder = flexmock('builder')
232
- builder.should_expect do |rec|
233
- rec.should_be_strict
234
- known_good_way_to_build_xml(rec) # record the messages
235
- end
236
- new_way_to_build_xml(builder) # compare to new way
237
- end
238
-
239
- end
240
-
241
- class TestMoreSamples < Test::Unit::TestCase
242
- include FlexMock::TestCase
243
-
244
- def test_multiple_gets
245
- file = flexmock('file')
246
- file.should_receive(:gets).with_no_args.
247
- and_return("line 1\n", "line 2\n")
248
- # test code here
249
- assert_equal "line 1\n", file.gets
250
- assert_equal "line 2\n", file.gets
251
- end
252
-
253
- def test_an_important_message
254
- m = flexmock('m')
255
- m.should_receive(:an_important_message).and_return(1).once
256
- m.should_ignore_missing
257
- # test code here
258
- assert_equal 1, m.an_important_message
259
- assert_equal FlexMock.undefined, m.other
260
- end
261
-
262
- class QuoteService
263
- end
264
-
265
- class Portfolio
266
- def initialize
267
- @quote_service = QuoteService.new
268
- end
269
- def value
270
- @quote_service.quote
271
- end
272
- end
273
-
274
- def test_portfolio_value
275
- flexmock(QuoteService).new_instances do |m|
276
- m.should_receive(:quote).and_return(100)
277
- end
278
- port = Portfolio.new
279
- value = port.value # Portfolio calls QuoteService.quote
280
- assert_equal 100, value
281
- end
282
-
283
- end