mocha 0.5.6 → 0.9.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 +4 -4
- data/RELEASE +45 -0
- data/Rakefile +55 -33
- data/lib/mocha.rb +1 -0
- data/lib/mocha/any_instance_method.rb +24 -4
- data/lib/mocha/backtrace_filter.rb +17 -0
- data/lib/mocha/cardinality.rb +92 -0
- data/lib/mocha/central.rb +1 -9
- data/lib/mocha/change_state_side_effect.rb +19 -0
- data/lib/mocha/class_method.rb +25 -5
- data/lib/mocha/configuration.rb +60 -0
- data/lib/mocha/exception_raiser.rb +1 -1
- data/lib/mocha/expectation.rb +109 -48
- data/lib/mocha/expectation_error.rb +6 -6
- data/lib/mocha/expectation_list.rb +10 -14
- data/lib/mocha/in_state_ordering_constraint.rb +19 -0
- data/lib/mocha/instance_method.rb +9 -0
- data/lib/mocha/logger.rb +15 -0
- data/lib/mocha/mock.rb +19 -14
- data/lib/mocha/mockery.rb +166 -0
- data/lib/mocha/module_method.rb +17 -0
- data/lib/mocha/names.rb +53 -0
- data/lib/mocha/object.rb +26 -9
- data/lib/mocha/parameter_matchers.rb +2 -1
- data/lib/mocha/parameter_matchers/all_of.rb +3 -3
- data/lib/mocha/parameter_matchers/any_of.rb +3 -3
- data/lib/mocha/parameter_matchers/anything.rb +1 -1
- data/lib/mocha/parameter_matchers/has_entries.rb +4 -1
- data/lib/mocha/parameter_matchers/has_entry.rb +3 -2
- data/lib/mocha/parameter_matchers/has_key.rb +1 -1
- data/lib/mocha/parameter_matchers/has_value.rb +1 -1
- data/lib/mocha/parameter_matchers/not.rb +2 -2
- data/lib/mocha/parameter_matchers/object.rb +1 -1
- data/lib/mocha/parameter_matchers/optionally.rb +22 -0
- data/lib/mocha/parameter_matchers/regexp_matches.rb +2 -2
- data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
- data/lib/mocha/single_return_value.rb +2 -9
- data/lib/mocha/standalone.rb +151 -17
- data/lib/mocha/state_machine.rb +91 -0
- data/lib/mocha/stubbing_error.rb +16 -0
- data/lib/mocha/test_case_adapter.rb +76 -22
- data/lib/stubba.rb +2 -1
- data/test/acceptance/acceptance_test_helper.rb +38 -0
- data/test/acceptance/bug_18914_test.rb +43 -0
- data/test/acceptance/{expected_invocation_count_acceptance_test.rb → expected_invocation_count_test.rb} +29 -20
- data/test/acceptance/failure_messages_test.rb +64 -0
- data/test/acceptance/{mocha_acceptance_test.rb → mocha_example_test.rb} +5 -5
- data/test/{integration/mocha_test_result_integration_test.rb → acceptance/mocha_test_result_test.rb} +19 -40
- data/test/acceptance/mock_test.rb +100 -0
- data/test/acceptance/{mock_with_initializer_block_acceptance_test.rb → mock_with_initializer_block_test.rb} +12 -5
- data/test/acceptance/{mocked_methods_dispatch_acceptance_test.rb → mocked_methods_dispatch_test.rb} +12 -5
- data/test/acceptance/{optional_parameters_acceptance_test.rb → optional_parameters_test.rb} +11 -4
- data/test/acceptance/{parameter_matcher_acceptance_test.rb → parameter_matcher_test.rb} +67 -5
- data/test/acceptance/{partial_mocks_acceptance_test.rb → partial_mocks_test.rb} +12 -5
- data/test/acceptance/return_value_test.rb +52 -0
- data/test/acceptance/{sequence_acceptance_test.rb → sequence_test.rb} +13 -6
- data/test/acceptance/{standalone_acceptance_test.rb → standalone_test.rb} +19 -11
- data/test/acceptance/states_test.rb +70 -0
- data/test/acceptance/stub_any_instance_method_test.rb +195 -0
- data/test/acceptance/stub_class_method_test.rb +203 -0
- data/test/acceptance/stub_everything_test.rb +56 -0
- data/test/acceptance/stub_instance_method_test.rb +165 -0
- data/test/acceptance/stub_module_method_test.rb +163 -0
- data/test/acceptance/stub_test.rb +52 -0
- data/test/acceptance/{stubba_acceptance_test.rb → stubba_example_test.rb} +1 -1
- data/test/{integration/stubba_test_result_integration_test.rb → acceptance/stubba_test_result_test.rb} +17 -36
- data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +155 -0
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +145 -0
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_public_class_method_test.rb +161 -0
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +141 -0
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
- data/test/execution_point.rb +3 -1
- data/test/simple_counter.rb +13 -0
- data/test/test_helper.rb +0 -1
- data/test/test_runner.rb +6 -4
- data/test/unit/any_instance_method_test.rb +1 -1
- data/test/unit/array_inspect_test.rb +1 -1
- data/test/unit/backtrace_filter_test.rb +19 -0
- data/test/unit/cardinality_test.rb +56 -0
- data/test/unit/central_test.rb +4 -63
- data/test/unit/change_state_side_effect_test.rb +41 -0
- data/test/unit/class_method_test.rb +38 -1
- data/test/unit/date_time_inspect_test.rb +1 -1
- data/test/unit/{expectation_raiser_test.rb → exception_raiser_test.rb} +14 -0
- data/test/unit/expectation_list_test.rb +4 -22
- data/test/unit/expectation_test.rb +70 -94
- data/test/unit/in_state_ordering_constraint_test.rb +43 -0
- data/test/unit/mock_test.rb +16 -37
- data/test/unit/mockery_test.rb +149 -0
- data/test/unit/{no_yield_test.rb → no_yields_test.rb} +0 -0
- data/test/unit/object_test.rb +6 -89
- data/test/unit/parameter_matchers/equals_test.rb +25 -0
- data/test/unit/parameter_matchers/has_entries_test.rb +22 -1
- data/test/unit/parameter_matchers/has_entry_test.rb +24 -2
- data/test/unit/parameter_matchers/has_key_test.rb +11 -0
- data/test/unit/parameter_matchers/has_value_test.rb +12 -0
- data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -1
- data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
- data/test/unit/parameter_matchers/stub_matcher.rb +4 -0
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
- data/test/unit/single_return_value_test.rb +0 -19
- data/test/unit/state_machine_test.rb +98 -0
- metadata +108 -69
- data/lib/mocha/auto_verify.rb +0 -118
- data/lib/mocha/infinite_range.rb +0 -25
- data/lib/mocha/missing_expectation.rb +0 -17
- data/lib/mocha/setup_and_teardown.rb +0 -23
- data/lib/mocha/stub.rb +0 -18
- data/test/integration/stubba_integration_test.rb +0 -89
- data/test/unit/auto_verify_test.rb +0 -129
- data/test/unit/expectation_error_test.rb +0 -24
- data/test/unit/infinite_range_test.rb +0 -53
- data/test/unit/missing_expectation_test.rb +0 -42
- data/test/unit/setup_and_teardown_test.rb +0 -76
- data/test/unit/stub_test.rb +0 -24
@@ -3,12 +3,11 @@ require 'method_definer'
|
|
3
3
|
require 'mocha/expectation'
|
4
4
|
require 'mocha/sequence'
|
5
5
|
require 'execution_point'
|
6
|
-
require '
|
6
|
+
require 'simple_counter'
|
7
7
|
|
8
8
|
class ExpectationTest < Test::Unit::TestCase
|
9
9
|
|
10
10
|
include Mocha
|
11
|
-
include DeprecationDisabler
|
12
11
|
|
13
12
|
def new_expectation
|
14
13
|
Expectation.new(nil, :expected_method)
|
@@ -184,24 +183,6 @@ class ExpectationTest < Test::Unit::TestCase
|
|
184
183
|
assert_nil expectation.invoke
|
185
184
|
end
|
186
185
|
|
187
|
-
def test_should_return_evaluated_proc
|
188
|
-
proc = lambda { 99 }
|
189
|
-
expectation = new_expectation.returns(proc)
|
190
|
-
result = nil
|
191
|
-
disable_deprecations { result = expectation.invoke }
|
192
|
-
assert_equal 99, result
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_should_return_evaluated_proc_without_using_is_a_method
|
196
|
-
proc = lambda { 99 }
|
197
|
-
proc.define_instance_accessor(:called)
|
198
|
-
proc.called = false
|
199
|
-
proc.replace_instance_method(:is_a?) { self.called = true; true}
|
200
|
-
expectation = new_expectation.returns(proc)
|
201
|
-
disable_deprecations { expectation.invoke }
|
202
|
-
assert_equal false, proc.called
|
203
|
-
end
|
204
|
-
|
205
186
|
def test_should_raise_runtime_exception
|
206
187
|
expectation = new_expectation.raises
|
207
188
|
assert_raise(RuntimeError) { expectation.invoke }
|
@@ -248,101 +229,74 @@ class ExpectationTest < Test::Unit::TestCase
|
|
248
229
|
assert_equal 2, expectation.invoke
|
249
230
|
end
|
250
231
|
|
251
|
-
def
|
232
|
+
def test_should_verify_successfully_if_expected_call_was_made
|
252
233
|
expectation = new_expectation
|
253
234
|
expectation.invoke
|
254
|
-
|
255
|
-
expectation.verify
|
256
|
-
}
|
235
|
+
assert expectation.verified?
|
257
236
|
end
|
258
237
|
|
259
|
-
def
|
238
|
+
def test_should_not_verify_successfully_if_call_expected_once_but_invoked_twice
|
260
239
|
expectation = new_expectation.once
|
261
240
|
expectation.invoke
|
262
241
|
expectation.invoke
|
263
|
-
|
264
|
-
expectation.verify
|
265
|
-
}
|
242
|
+
assert !expectation.verified?
|
266
243
|
end
|
267
244
|
|
268
|
-
def
|
245
|
+
def test_should_not_verify_successfully_if_call_expected_once_but_not_invoked
|
269
246
|
expectation = new_expectation.once
|
270
|
-
|
271
|
-
expectation.verify
|
272
|
-
}
|
247
|
+
assert !expectation.verified?
|
273
248
|
end
|
274
249
|
|
275
|
-
def
|
250
|
+
def test_should_verify_successfully_if_call_expected_once_and_invoked_once
|
276
251
|
expectation = new_expectation.once
|
277
252
|
expectation.invoke
|
278
|
-
|
279
|
-
expectation.verify
|
280
|
-
}
|
253
|
+
assert expectation.verified?
|
281
254
|
end
|
282
255
|
|
283
|
-
def
|
256
|
+
def test_should_verify_successfully_if_expected_call_was_made_at_least_once
|
284
257
|
expectation = new_expectation.at_least_once
|
285
258
|
3.times {expectation.invoke}
|
286
|
-
|
287
|
-
expectation.verify
|
288
|
-
}
|
259
|
+
assert expectation.verified?
|
289
260
|
end
|
290
261
|
|
291
|
-
def
|
262
|
+
def test_should_not_verify_successfully_if_expected_call_was_not_made_at_least_once
|
292
263
|
expectation = new_expectation.with(1, 2, 3).at_least_once
|
293
|
-
|
294
|
-
|
295
|
-
}
|
296
|
-
assert_match(/expected calls: at least 1, actual calls: 0/i, e.message)
|
264
|
+
assert !expectation.verified?
|
265
|
+
assert_match(/expected at least once, never invoked/i, expectation.mocha_inspect)
|
297
266
|
end
|
298
267
|
|
299
|
-
def
|
268
|
+
def test_should_verify_successfully_if_expected_call_was_made_expected_number_of_times
|
300
269
|
expectation = new_expectation.times(2)
|
301
270
|
2.times {expectation.invoke}
|
302
|
-
|
303
|
-
expectation.verify
|
304
|
-
}
|
271
|
+
assert expectation.verified?
|
305
272
|
end
|
306
273
|
|
307
|
-
def
|
308
|
-
expectation = new_expectation
|
309
|
-
expectation.define_instance_accessor(:how_many_times)
|
310
|
-
expectation.replace_instance_method(:times) { |how_many_times| self.how_many_times = how_many_times }
|
311
|
-
expectation.never
|
312
|
-
assert_equal 0, expectation.how_many_times
|
313
|
-
end
|
314
|
-
|
315
|
-
def test_should_raise_error_on_verify_if_expected_call_was_made_too_few_times
|
274
|
+
def test_should_not_verify_successfully_if_expected_call_was_made_too_few_times
|
316
275
|
expectation = new_expectation.times(2)
|
317
276
|
1.times {expectation.invoke}
|
318
|
-
|
319
|
-
|
320
|
-
}
|
321
|
-
assert_match(/expected calls: 2, actual calls: 1/i, e.message)
|
277
|
+
assert !expectation.verified?
|
278
|
+
assert_match(/expected exactly 2 times, already invoked 1 time/i, expectation.mocha_inspect)
|
322
279
|
end
|
323
280
|
|
324
|
-
def
|
281
|
+
def test_should_not_verify_successfully_if_expected_call_was_made_too_many_times
|
325
282
|
expectation = new_expectation.times(2)
|
326
283
|
3.times {expectation.invoke}
|
327
|
-
|
328
|
-
expectation.verify
|
329
|
-
}
|
284
|
+
assert !expectation.verified?
|
330
285
|
end
|
331
286
|
|
332
|
-
def
|
287
|
+
def test_should_increment_assertion_counter_for_expectation_because_it_does_need_verifyng
|
333
288
|
expectation = new_expectation
|
334
289
|
expectation.invoke
|
335
|
-
|
336
|
-
expectation.
|
337
|
-
assert_equal
|
290
|
+
assertion_counter = SimpleCounter.new
|
291
|
+
expectation.verified?(assertion_counter)
|
292
|
+
assert_equal 1, assertion_counter.count
|
338
293
|
end
|
339
294
|
|
340
|
-
def
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
assert yielded
|
295
|
+
def test_should_not_increment_assertion_counter_for_stub_because_it_does_not_need_verifying
|
296
|
+
stub = Expectation.new(nil, :expected_method).at_least(0)
|
297
|
+
assertion_counter = SimpleCounter.new
|
298
|
+
stub.verified?(assertion_counter)
|
299
|
+
assert_equal 0, assertion_counter.count
|
346
300
|
end
|
347
301
|
|
348
302
|
def test_should_store_backtrace_from_point_where_expectation_was_created
|
@@ -350,21 +304,6 @@ class ExpectationTest < Test::Unit::TestCase
|
|
350
304
|
assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
|
351
305
|
end
|
352
306
|
|
353
|
-
def test_should_set_backtrace_on_assertion_failed_error_to_point_where_expectation_was_created
|
354
|
-
execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
|
355
|
-
error = assert_raise(ExpectationError) {
|
356
|
-
expectation.verify
|
357
|
-
}
|
358
|
-
assert_equal execution_point, ExecutionPoint.new(error.backtrace)
|
359
|
-
end
|
360
|
-
|
361
|
-
def test_should_display_expectation_in_exception_message
|
362
|
-
options = [:a, :b, {:c => 1, :d => 2}]
|
363
|
-
expectation = new_expectation.with(*options)
|
364
|
-
exception = assert_raise(ExpectationError) { expectation.verify }
|
365
|
-
assert exception.message.include?(expectation.method_signature)
|
366
|
-
end
|
367
|
-
|
368
307
|
class FakeMock
|
369
308
|
|
370
309
|
def initialize(name)
|
@@ -381,9 +320,9 @@ class ExpectationTest < Test::Unit::TestCase
|
|
381
320
|
mock = FakeMock.new('mock')
|
382
321
|
sequence_one = Sequence.new('one')
|
383
322
|
sequence_two = Sequence.new('two')
|
384
|
-
expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true, :b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
|
385
|
-
|
386
|
-
assert_match "mock.expected_method(1, 2, {'a' => true, :b => false}, [1, 2, 3]); in sequence 'one'; in sequence 'two'",
|
323
|
+
expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
|
324
|
+
assert !expectation.verified?
|
325
|
+
assert_match "mock.expected_method(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]); in sequence 'one'; in sequence 'two'", expectation.mocha_inspect
|
387
326
|
end
|
388
327
|
|
389
328
|
class FakeConstraint
|
@@ -479,5 +418,42 @@ class ExpectationTest < Test::Unit::TestCase
|
|
479
418
|
assert_equal [expectation], sequence_one.expectations
|
480
419
|
assert_equal [expectation], sequence_two.expectations
|
481
420
|
end
|
421
|
+
|
422
|
+
class FakeState
|
423
|
+
|
424
|
+
def initialize
|
425
|
+
@active = false
|
426
|
+
end
|
427
|
+
|
428
|
+
def activate
|
429
|
+
@active = true
|
430
|
+
end
|
431
|
+
|
432
|
+
def active?
|
433
|
+
@active
|
434
|
+
end
|
435
|
+
|
436
|
+
end
|
437
|
+
|
438
|
+
def test_should_change_state_when_expectation_is_invoked
|
439
|
+
state = FakeState.new
|
440
|
+
expectation = Expectation.new(nil, :method_one)
|
441
|
+
|
442
|
+
expectation.then(state)
|
443
|
+
|
444
|
+
expectation.invoke
|
445
|
+
assert state.active?
|
446
|
+
end
|
447
|
+
|
448
|
+
def test_should_match_when_state_is_active
|
449
|
+
state = FakeState.new
|
450
|
+
expectation = Expectation.new(nil, :method_one)
|
482
451
|
|
452
|
+
expectation.when(state)
|
453
|
+
assert !expectation.match?(:method_one)
|
454
|
+
|
455
|
+
state.activate
|
456
|
+
assert expectation.match?(:method_one)
|
457
|
+
end
|
458
|
+
|
483
459
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
|
3
|
+
require 'mocha/in_state_ordering_constraint'
|
4
|
+
|
5
|
+
class InStateOrderingConstraintTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include Mocha
|
8
|
+
|
9
|
+
class FakeStatePredicate
|
10
|
+
|
11
|
+
attr_writer :active, :description
|
12
|
+
|
13
|
+
def active?
|
14
|
+
@active
|
15
|
+
end
|
16
|
+
|
17
|
+
def mocha_inspect
|
18
|
+
@description
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_allow_invocation_when_state_is_active
|
24
|
+
state_predicate = FakeStatePredicate.new
|
25
|
+
ordering_constraint = InStateOrderingConstraint.new(state_predicate)
|
26
|
+
|
27
|
+
state_predicate.active = true
|
28
|
+
assert ordering_constraint.allows_invocation_now?
|
29
|
+
|
30
|
+
state_predicate.active = false
|
31
|
+
assert !ordering_constraint.allows_invocation_now?
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_describe_itself_in_terms_of_the_state_predicates_description
|
35
|
+
state_predicate = FakeStatePredicate.new
|
36
|
+
ordering_constraint = InStateOrderingConstraint.new(state_predicate)
|
37
|
+
|
38
|
+
state_predicate.description = 'the-state-predicate'
|
39
|
+
|
40
|
+
assert_equal 'when the-state-predicate', ordering_constraint.mocha_inspect
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/test/unit/mock_test.rb
CHANGED
@@ -2,6 +2,7 @@ require File.join(File.dirname(__FILE__), "..", "test_helper")
|
|
2
2
|
require 'mocha/mock'
|
3
3
|
require 'mocha/expectation_error'
|
4
4
|
require 'set'
|
5
|
+
require 'simple_counter'
|
5
6
|
|
6
7
|
class MockTest < Test::Unit::TestCase
|
7
8
|
|
@@ -33,26 +34,6 @@ class MockTest < Test::Unit::TestCase
|
|
33
34
|
assert_equal true, mock.everything_stubbed
|
34
35
|
end
|
35
36
|
|
36
|
-
def test_should_display_object_id_for_mocha_inspect_if_mock_has_no_name
|
37
|
-
mock = Mock.new
|
38
|
-
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.mocha_inspect
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_should_display_name_for_mocha_inspect_if_mock_has_name
|
42
|
-
mock = Mock.new('named_mock')
|
43
|
-
assert_equal "#<Mock:named_mock>", mock.mocha_inspect
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_should_display_object_id_for_inspect_if_mock_has_no_name
|
47
|
-
mock = Mock.new
|
48
|
-
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.inspect
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_should_display_name_for_inspect_if_mock_has_name
|
52
|
-
mock = Mock.new('named_mock')
|
53
|
-
assert_equal "#<Mock:named_mock>", mock.inspect
|
54
|
-
end
|
55
|
-
|
56
37
|
def test_should_be_able_to_extend_mock_object_with_module
|
57
38
|
mock = Mock.new
|
58
39
|
assert_nothing_raised(ExpectationError) { mock.extend(Module.new) }
|
@@ -73,7 +54,7 @@ class MockTest < Test::Unit::TestCase
|
|
73
54
|
mock = Mock.new
|
74
55
|
OBJECT_METHODS.each { |method| mock.__expects__(method.to_sym).returns(method) }
|
75
56
|
OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
|
76
|
-
|
57
|
+
assert mock.verified?
|
77
58
|
end
|
78
59
|
|
79
60
|
def test_should_be_able_to_stub_standard_object_methods
|
@@ -150,30 +131,28 @@ class MockTest < Test::Unit::TestCase
|
|
150
131
|
assert_equal [:argument1, :argument2], mock.arguments
|
151
132
|
end
|
152
133
|
|
153
|
-
def
|
134
|
+
def test_should_not_verify_successfully_because_not_all_expectations_have_been_satisfied
|
154
135
|
mock = Mock.new
|
155
136
|
mock.expects(:method1)
|
156
137
|
mock.expects(:method2)
|
157
138
|
mock.method1
|
158
|
-
|
159
|
-
mock.verify
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
def test_should_report_possible_expectations
|
164
|
-
mock = Mock.new
|
165
|
-
mock.expects(:expected_method).with(1)
|
166
|
-
exception = assert_raise(ExpectationError) { mock.expected_method(2) }
|
167
|
-
assert_equal "#{mock.mocha_inspect}.expected_method(2) - expected calls: 0, actual calls: 1\nSimilar expectations:\n#{mock.mocha_inspect}.expected_method(1)", exception.message
|
139
|
+
assert !mock.verified?
|
168
140
|
end
|
169
141
|
|
170
|
-
def
|
142
|
+
def test_should_increment_assertion_counter_for_every_verified_expectation
|
171
143
|
mock = Mock.new
|
172
|
-
|
144
|
+
|
145
|
+
mock.expects(:method1)
|
173
146
|
mock.method1
|
174
|
-
|
175
|
-
mock.
|
176
|
-
|
147
|
+
|
148
|
+
mock.expects(:method2)
|
149
|
+
mock.method2
|
150
|
+
|
151
|
+
assertion_counter = SimpleCounter.new
|
152
|
+
|
153
|
+
mock.verified?(assertion_counter)
|
154
|
+
|
155
|
+
assert_equal 2, assertion_counter.count
|
177
156
|
end
|
178
157
|
|
179
158
|
def test_should_yield_supplied_parameters_to_block
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
require 'mocha/mockery'
|
3
|
+
require 'mocha/state_machine'
|
4
|
+
|
5
|
+
class MockeryTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include Mocha
|
8
|
+
|
9
|
+
def test_should_build_instance_of_mockery
|
10
|
+
mockery = Mockery.instance
|
11
|
+
assert_not_nil mockery
|
12
|
+
assert_kind_of Mockery, mockery
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_cache_instance_of_mockery
|
16
|
+
mockery_1 = Mockery.instance
|
17
|
+
mockery_2 = Mockery.instance
|
18
|
+
assert_same mockery_1, mockery_2
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_expire_mockery_instance_cache
|
22
|
+
mockery_1 = Mockery.instance
|
23
|
+
Mockery.reset_instance
|
24
|
+
mockery_2 = Mockery.instance
|
25
|
+
assert_not_same mockery_1, mockery_2
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_raise_expectation_error_because_not_all_expectations_are_satisfied
|
29
|
+
mockery = Mockery.new
|
30
|
+
mock_1 = mockery.named_mock('mock-1') { expects(:method_1) }
|
31
|
+
mock_2 = mockery.named_mock('mock-2') { expects(:method_2) }
|
32
|
+
1.times { mock_1.method_1 }
|
33
|
+
0.times { mock_2.method_2 }
|
34
|
+
assert_raises(ExpectationError) { mockery.verify }
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_reset_list_of_mocks_on_teardown
|
38
|
+
mockery = Mockery.new
|
39
|
+
mock = mockery.unnamed_mock { expects(:my_method) }
|
40
|
+
mockery.teardown
|
41
|
+
assert_nothing_raised(ExpectationError) { mockery.verify }
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_build_instance_of_stubba_on_instantiation
|
45
|
+
mockery = Mockery.new
|
46
|
+
assert_not_nil mockery.stubba
|
47
|
+
assert_kind_of Central, mockery.stubba
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_build_new_instance_of_stubba_on_teardown
|
51
|
+
mockery = Mockery.new
|
52
|
+
stubba_1 = mockery.stubba
|
53
|
+
mockery.teardown
|
54
|
+
stubba_2 = mockery.stubba
|
55
|
+
assert_not_same stubba_1, stubba_2
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_should_build_and_store_new_state_machine
|
59
|
+
mockery = Mockery.new
|
60
|
+
mockery.new_state_machine('state-machine-name')
|
61
|
+
assert_equal 1, mockery.state_machines.length
|
62
|
+
assert_kind_of StateMachine, mockery.state_machines[0]
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_should_reset_list_of_state_machines_on_teardown
|
66
|
+
mockery = Mockery.new
|
67
|
+
mockery.new_state_machine('state-machine-name')
|
68
|
+
mockery.teardown
|
69
|
+
assert_equal 0, mockery.state_machines.length
|
70
|
+
end
|
71
|
+
|
72
|
+
class FakeMethod
|
73
|
+
def stub; end
|
74
|
+
def unstub; end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_should_unstub_all_methods_on_teardown
|
78
|
+
mockery = Mockery.new
|
79
|
+
stubba = mockery.stubba
|
80
|
+
stubba.stub(FakeMethod.new)
|
81
|
+
mockery.teardown
|
82
|
+
assert stubba.stubba_methods.empty?
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_should_display_object_id_for_mocha_inspect_if_mock_has_no_name
|
86
|
+
mockery = Mockery.new
|
87
|
+
mock = mockery.unnamed_mock
|
88
|
+
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.mocha_inspect
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_should_display_object_id_for_inspect_if_mock_has_no_name
|
92
|
+
mockery = Mockery.new
|
93
|
+
mock = mockery.unnamed_mock
|
94
|
+
assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.inspect
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_should_display_name_for_mocha_inspect_if_mock_has_string_name
|
98
|
+
mockery = Mockery.new
|
99
|
+
mock = mockery.named_mock('named_mock')
|
100
|
+
assert_equal "#<Mock:named_mock>", mock.mocha_inspect
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_should_display_name_for_mocha_inspect_if_mock_has_symbol_name
|
104
|
+
mockery = Mockery.new
|
105
|
+
mock = mockery.named_mock(:named_mock)
|
106
|
+
assert_equal "#<Mock:named_mock>", mock.mocha_inspect
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_should_display_name_for_inspect_if_mock_has_string_name
|
110
|
+
mockery = Mockery.new
|
111
|
+
mock = mockery.named_mock('named_mock')
|
112
|
+
assert_equal "#<Mock:named_mock>", mock.inspect
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_should_display_name_for_inspect_if_mock_has_symbol_name
|
116
|
+
mockery = Mockery.new
|
117
|
+
mock = mockery.named_mock(:named_mock)
|
118
|
+
assert_equal "#<Mock:named_mock>", mock.inspect
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_should_display_impersonated_object_for_mocha_inspect
|
122
|
+
mockery = Mockery.new
|
123
|
+
instance = Object.new
|
124
|
+
mock = mockery.mock_impersonating(instance)
|
125
|
+
assert_equal "#{instance.mocha_inspect}", mock.mocha_inspect
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_should_display_impersonated_object_for_inspect
|
129
|
+
mockery = Mockery.new
|
130
|
+
instance = Object.new
|
131
|
+
mock = mockery.mock_impersonating(instance)
|
132
|
+
assert_equal "#{instance.mocha_inspect}", mock.inspect
|
133
|
+
end
|
134
|
+
|
135
|
+
class FakeClass; end
|
136
|
+
|
137
|
+
def test_should_display_any_instance_prefix_followed_by_class_whose_instances_are_being_impersonated_for_mocha_inspect
|
138
|
+
mockery = Mockery.new
|
139
|
+
mock = mockery.mock_impersonating_any_instance_of(FakeClass)
|
140
|
+
assert_equal "#<AnyInstance:MockeryTest::FakeClass>", mock.mocha_inspect
|
141
|
+
end
|
142
|
+
|
143
|
+
def test_should_display_any_instance_prefix_followed_by_class_whose_instances_are_being_impersonated_for_inspect
|
144
|
+
mockery = Mockery.new
|
145
|
+
mock = mockery.mock_impersonating_any_instance_of(FakeClass)
|
146
|
+
assert_equal "#<AnyInstance:MockeryTest::FakeClass>", mock.inspect
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|