flexmock 0.2.1 → 0.3.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/CHANGELOG CHANGED
@@ -1,5 +1,9 @@
1
1
  = Changes for FlexMock
2
2
 
3
+ == Version 0.3.0
4
+
5
+ * Added Test::Unit integration.
6
+
3
7
  == Version 0.2.1
4
8
 
5
9
  * Added strict mode in record mode interface to facility using known
data/README CHANGED
@@ -3,7 +3,7 @@
3
3
  FlexMock is a simple mock object for unit testing. The interface is
4
4
  simple, but still provides a good bit of flexibility.
5
5
 
6
- Version :: 0.2.1
6
+ Version :: 0.3.0
7
7
 
8
8
  = Links
9
9
 
@@ -37,14 +37,19 @@ Here's the complete example:
37
37
  end
38
38
 
39
39
  class TestTemperatureSampler < Test::Unit::TestCase
40
+ include FlexMock::TestCase
41
+
40
42
  def test_tempurature_sampler
41
43
  readings = [10, 12, 14]
42
- FlexMock.use("temp") do |sensor|
43
- sensor.should_receive(:read_temperature).and_return { readings.shift }
44
+ sensor = flexmock("temp")
45
+ sensor.should_receive(:read_temperature).and_return { readings.shift }
46
+
47
+ sampler = TemperatureSampler.new(sensor)
48
+ assert_equal 12, sampler.average_temp
44
49
 
45
- sampler = TemperatureSampler.new(sensor)
46
- assert_equal 12, sampler.average_temp
47
- end
50
+ # NOTE:
51
+ # all mocks created by the +flexmock+ method will be
52
+ # automatically verified during the test teardown.
48
53
  end
49
54
  end
50
55
 
@@ -180,19 +185,21 @@ The following rules are used for argument matching:
180
185
 
181
186
  Examples:
182
187
 
183
- with(FlexMock.eq(Integer)) will match f(Integer)
184
- with(FlexMock.eq(Integer)) will NOT match f(3)
185
-
186
- If the user includes the FlexMock::ArgumentTypes module in the test
187
- class, the above examples can be shortened to:
188
-
189
188
  with(eq(Integer)) will match f(Integer)
190
189
  with(eq(Integer)) will NOT match f(3)
191
190
 
191
+ Note: If you do not use the FlexMock::TestCase Test Unit integration
192
+ module, or the FlexMock::ArgumentTypes module, you will have to
193
+ fully qualify the +eq+ method:
194
+
195
+ with(FlexMock.eq(Integer)) will match f(Integer)
196
+ with(FlexMock.eq(Integer)) will NOT match f(3)
197
+
192
198
  * If you wish to match _anything_, then use the <tt>FlexMock.any</tt>
193
199
  method in the with argument list.
194
200
 
195
- Examples (assumes FlexMock::ArguementTypes has been included):
201
+ Examples (assumes either the FlexMock::TestCase or
202
+ FlexMock::ArgumentTypes mix-ins has been included):
196
203
 
197
204
  with(any) will match f(3)
198
205
  with(any) will match f("hello")
@@ -215,17 +222,26 @@ The following rules are used for argument matching:
215
222
  The queries my have any arguments. The update must have a specific
216
223
  argument of 5.
217
224
 
218
- FlexMock('db').use |db|
219
- db.should_receive(:query).and_return([1,2,3])
220
- db.should_receive(:update).with(5).and_return(nil).once
221
- # test code here
225
+ class TestDb
226
+ include FlexMock::TestCase
227
+
228
+ def test_db
229
+ db = flexmock('db')
230
+ db.should_receive(:query).and_return([1,2,3])
231
+ db.should_receive(:update).with(5).and_return(nil).once
232
+ # test code here
233
+ end
222
234
  end
223
235
 
224
236
  === Expect all queries before any updates
225
237
 
238
+ (This and following examples assume that the FlexMock::TestCase module
239
+ is being used.)
240
+
226
241
  All the query message must occur before any of the update messages.
227
242
 
228
- FlexMock('db').use |db|
243
+ def test_query_and_update
244
+ db = flexmock('db')
229
245
  db.should_receive(:query).and_return([1,2,3]).ordered
230
246
  db.should_recieve(:update).and_return(nil).ordered
231
247
  # test code here
@@ -243,7 +259,8 @@ Startup and finish must also happen exactly once.
243
259
  Also note that we use the +with+ method to match different arguement
244
260
  values to figure out what value to return.
245
261
 
246
- FlexMock('db').use |db|
262
+ def test_ordered_queries
263
+ db = flexmock('db')
247
264
  db.should_receive(:startup).once.ordered
248
265
  db.should_receive(:query).with("CPWR").and_return(12.3).
249
266
  once.ordered(:queries)
@@ -262,7 +279,8 @@ The record mode interface offers much the same features as the
262
279
  messages to be sent directly to a recording object rather than be
263
280
  specified indirectly using a symbol.
264
281
 
265
- FlexMock('db').use |db|
282
+ def test_ordered_queries_in_record_mode
283
+ db = flexmock('db')
266
284
  db.should_expect do |rec|
267
285
  rec.startup.once.ordered
268
286
  rec.query("CPWR") { 12.3 }.once.ordered(:queries)
@@ -286,7 +304,8 @@ matching on argument lists, and strict ordering of the method calls.
286
304
  objects, because the query responses cannot be programmed into the
287
305
  recorder object.
288
306
 
289
- FlexMock.use('builder') do |builder|
307
+ def test_build_xml
308
+ builder = flexmock('builder')
290
309
  builder.should_expect do |rec|
291
310
  rec.should_be_strict
292
311
  known_good_way_to_build_xml(rec) # record the messages
@@ -300,7 +319,8 @@ Sometimes you need to return different values for each call to a
300
319
  mocked method. This example shifts values out of a list for this
301
320
  effect.
302
321
 
303
- FlexMock('file').use |file|
322
+ def test_multiple_gets
323
+ file = flexmock('file')
304
324
  return_values = ["line 1\n", "line 2\n"]
305
325
  file.should_receive(:gets).with_no_args.and_return { return_values.shift }
306
326
  # test code here
@@ -313,7 +333,8 @@ interesting value or wish to assert were sent in a particular manner.
313
333
  Use the +should_ignore_missing+ method to turn on missing method
314
334
  ignoring.
315
335
 
316
- FlexMock('m').use |m|
336
+ def test_an_important_message
337
+ m = flexmock('m')
317
338
  m.should_recieve(:an_important_message).and_return(1).once
318
339
  m.should_ignore_missing
319
340
  # test code here
@@ -339,7 +360,7 @@ test-unit-mock :: http://www.deveiate.org/code/Test-Unit-Mock.shtml
339
360
 
340
361
  == License
341
362
 
342
- Copyright 2003, 2004, 2005 by Jim Weirich (jim@weirichhouse.org).
363
+ Copyright 2003, 2004, 2005, 2006 by Jim Weirich (jim@weirichhouse.org).
343
364
  All rights reserved.
344
365
 
345
366
  Permission is granted for use, copying, modification, distribution,
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ require 'rake/testtask'
8
8
 
9
9
  CLOBBER.include("html", 'pkg')
10
10
 
11
- PKG_VERSION = '0.2.1'
11
+ PKG_VERSION = '0.3.0'
12
12
 
13
13
  PKG_FILES = FileList[
14
14
  '[A-Z]*',
@@ -137,6 +137,13 @@ end
137
137
 
138
138
  SVNHOME = 'svn://localhost/software/flexmock'
139
139
 
140
+ task :specs do
141
+ specs = FileList['test/spec_*.rb']
142
+ ENV['RUBYLIB'] = "lib:test:#{ENV['RUBYLIB']}"
143
+ sh %{spec #{specs}}
144
+ end
145
+
140
146
  task :tag do
141
147
  sh %{svn copy #{SVNHOME}/trunk #{SVNHOME}/tags/rel-#{PKG_VERSION} -m 'Release #{PKG_VERSION}'}
142
148
  end
149
+
@@ -30,9 +30,22 @@ require 'test/unit'
30
30
  # m.should_receive(:downcase).with(String).
31
31
  # returns { |s| s.downcase }.once
32
32
  #
33
- class FlexMock
34
- end
35
-
33
+ # With Test::Unit Integration:
34
+ #
35
+ # class TestSomething < Test::Unit::TestCase
36
+ # include FlexMock::TestCase
37
+ #
38
+ # def test_something
39
+ # m = flexmock("name")
40
+ # m.should_receive(:hi).and_return("Hello")
41
+ # m.hi
42
+ # end
43
+ # end
44
+ #
45
+ # Note: When using Test::Unit integeration, don't forget to include
46
+ # FlexMock::TestCase. Also, if you override +teardown+, make sure you
47
+ # call +super+.
48
+ #
36
49
  class FlexMock
37
50
  include Test::Unit::Assertions
38
51
 
@@ -156,6 +169,10 @@ class FlexMock
156
169
  # returns(0).once
157
170
  # end # mock is verified here
158
171
  #
172
+ # NOTE: If you include FlexMock::TestCase into your test case
173
+ # file, you can create moks that will be automatically verified in
174
+ # the test teardown by using the +flexmock+ method.
175
+ #
159
176
  def use(*names)
160
177
  names = ["unknown"] if names.empty?
161
178
  got_excecption = false
@@ -313,6 +330,7 @@ class FlexMock
313
330
  ProcMatcher.new(&block)
314
331
  end
315
332
  end
333
+ extend ArgumentTypes
316
334
 
317
335
  ####################################################################
318
336
  # Base class for all the count validators.
@@ -648,5 +666,45 @@ class FlexMock
648
666
  end
649
667
  end
650
668
 
651
- extend ArgumentTypes
669
+ ####################################################################
670
+ # Test::Unit::TestCase Integration.
671
+ #
672
+ # Include this module in any TestCase class in a Test::Unit test
673
+ # suite to get integration with FlexMock. When this module is
674
+ # included, mocks may be created with a simple call to the
675
+ # +flexmock+ method. Mocks created with via the method call will
676
+ # automatically be verified in the teardown of the test case.
677
+ #
678
+ # <b>Note:</b> If you define a +teardown+ method in the test case,
679
+ # <em>dont' forget to invoke the +super+ method!</em> Failure to
680
+ # invoke super will cause all mocks to not be verified.
681
+ #
682
+ module TestCase
683
+ include ArgumentTypes
684
+
685
+ # Teardown the test case, verifying any mocks that might have been
686
+ # defined in this test case.
687
+ def teardown
688
+ super
689
+ flexmock_teardown
690
+ end
691
+
692
+ # Do the flexmock specific teardown stuff.
693
+ def flexmock_teardown
694
+ return if @flexmock_created_mocks.nil?
695
+ @flexmock_created_mocks.each do |m|
696
+ m.mock_verify
697
+ end
698
+ end
699
+
700
+ # Create a FlexMock object with the given name. Mocks created
701
+ # with this method will be automatically verify during teardown
702
+ # (assuming the the flexmock teardown isn't overridden).
703
+ def flexmock(name="unknown")
704
+ result = FlexMock.new(name)
705
+ @flexmock_created_mocks ||= []
706
+ @flexmock_created_mocks << result
707
+ result
708
+ end
709
+ end
652
710
  end
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'flexmock'
5
+
6
+ class TestTuIntegrationMockVerificationInTeardown < Test::Unit::TestCase
7
+ include FlexMock::TestCase
8
+
9
+ def setup
10
+ super
11
+ end
12
+
13
+ def teardown
14
+ assert_raise(Test::Unit::AssertionFailedError) do
15
+ super
16
+ end
17
+ end
18
+
19
+ def test_mock_verification_occurs_during_teardown
20
+ flexmock("xyz").should_receive(:hi).with(any).once
21
+ end
22
+ end
23
+
24
+ class TestTuIntegrationMockVerificationWithoutSetup < Test::Unit::TestCase
25
+ include FlexMock::TestCase
26
+
27
+ def teardown
28
+ assert_raise(Test::Unit::AssertionFailedError) do
29
+ super
30
+ end
31
+ end
32
+
33
+ def test_mock_verification_occurs_during_teardown
34
+ flexmock("xyz").should_receive(:hi).with(any).once
35
+ end
36
+ end
37
+
38
+ class TestTuIntegrationMockVerificationForgetfulSetup < Test::Unit::TestCase
39
+ include FlexMock::TestCase
40
+
41
+ def setup
42
+ end
43
+
44
+ def teardown
45
+ assert_raise(Test::Unit::AssertionFailedError) do
46
+ super
47
+ end
48
+ end
49
+
50
+ def test_mock_verification_occurs_during_teardown
51
+ flexmock("xyz").should_receive(:hi).with(any).once
52
+ end
53
+ end
54
+
55
+ class TestTuIntegrationSetupOverridenAndNoMocksOk < Test::Unit::TestCase
56
+ include FlexMock::TestCase
57
+
58
+ def setup
59
+ end
60
+
61
+ def test_mock_verification_occurs_during_teardown
62
+ end
63
+ end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11.5
2
+ rubygems_version: 0.8.11.15
3
3
  specification_version: 1
4
4
  name: flexmock
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.1
7
- date: 2006-03-21 00:00:00 -05:00
6
+ version: 0.3.0
7
+ date: 2006-05-14 00:00:00 -04:00
8
8
  summary: Simple and Flexible Mock Objects for Testing
9
9
  require_paths:
10
10
  - lib
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
25
25
  platform: ruby
26
26
  signing_key:
27
27
  cert_chain:
28
+ post_install_message:
28
29
  authors:
29
30
  - Jim Weirich
30
31
  files:
@@ -32,12 +33,13 @@ files:
32
33
  - Rakefile
33
34
  - README
34
35
  - lib/flexmock.rb
35
- - test/test_should_receive.rb
36
36
  - test/test_record_mode.rb
37
+ - test/test_should_receive.rb
37
38
  - test/test_samples.rb
38
39
  - test/test_mock.rb
39
40
  - test/test_naming.rb
40
41
  - test/test_example.rb
42
+ - test/test_tu_integration.rb
41
43
  - flexmock.blurb
42
44
  - install.rb
43
45
  test_files: []