flexmock 0.7.1 → 0.8.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/CHANGES +17 -1
- data/README +84 -10
- data/Rakefile +11 -11
- data/TAGS +278 -195
- data/doc/releases/flexmock-0.8.0.rdoc +108 -0
- data/lib/flexmock/base.rb +1 -0
- data/lib/flexmock/core.rb +22 -15
- data/lib/flexmock/errors.rb +23 -0
- data/lib/flexmock/expectation.rb +38 -0
- data/lib/flexmock/expectation_director.rb +30 -10
- data/lib/flexmock/mock_container.rb +1 -1
- data/lib/flexmock/partial_mock.rb +8 -1
- data/lib/flexmock/rails/view_mocking.rb +30 -0
- data/lib/flexmock/rails.rb +15 -0
- data/lib/flexmock/undefined.rb +50 -0
- data/test/test_aliasing.rb +60 -0
- data/test/test_deprecated_methods.rb +1 -1
- data/test/test_examples_from_readme.rb +158 -0
- data/test/test_partial_mock.rb +42 -0
- data/test/test_rails_view_stub.rb +57 -0
- data/test/test_samples.rb +244 -0
- data/test/test_should_ignore_missing.rb +82 -0
- data/test/test_should_receive.rb +126 -3
- data/test/test_undefined.rb +88 -0
- metadata +13 -3
- data/test/test_example.rb +0 -36
data/CHANGES
CHANGED
@@ -1,9 +1,25 @@
|
|
1
1
|
= Changes for FlexMock
|
2
2
|
|
3
|
-
==
|
3
|
+
== Version 0.8.0
|
4
|
+
|
5
|
+
* Added by_default
|
6
|
+
* Added undefined behavior
|
7
|
+
* Mock methods are added to partial mocks only if they are not
|
8
|
+
previously defined. This should reduce the need for safe mode.
|
9
|
+
* respond_to? on mocks now accepts multiple arguments. This eases
|
10
|
+
mocking in rails a little bit.
|
11
|
+
* Added experimental view mocking for rails.
|
12
|
+
|
13
|
+
== Version 0.7.2
|
14
|
+
|
15
|
+
* Changed initial model Id to 10000.
|
16
|
+
* Added test suggested for RSpec Mocks, just to make sure we were good too.
|
17
|
+
|
18
|
+
== Version 0.7.1
|
4
19
|
|
5
20
|
* Updated install.rb to handle non-root destination directories via
|
6
21
|
DESTDIR.
|
22
|
+
* Fixed operator bug introduced in 0.7.0.
|
7
23
|
|
8
24
|
== Version 0.7.0
|
9
25
|
|
data/README
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
= Flex Mock -- Making Mock Easy
|
1
|
+
examples= Flex Mock -- Making Mock Easy
|
2
2
|
|
3
3
|
FlexMock is a simple, but flexible, mock object library for Ruby unit
|
4
4
|
testing.
|
5
5
|
|
6
|
-
Version :: 0.
|
6
|
+
Version :: 0.8.0
|
7
7
|
|
8
8
|
= Links
|
9
9
|
|
@@ -67,7 +67,7 @@ Your test case will look something like this:
|
|
67
67
|
|
68
68
|
require 'flexmock/test_unit'
|
69
69
|
|
70
|
-
class TestDog < Test::
|
70
|
+
class TestDog < Test::Unit::TestCase
|
71
71
|
def test_dog_wags
|
72
72
|
tail_mock = flexmock(:wag => :happy)
|
73
73
|
assert_equal :happy, tail_mock.wag
|
@@ -405,6 +405,17 @@ object. See theFlexMock::Expectation for more details.
|
|
405
405
|
the per-mock ordering are available in the globally ordered method
|
406
406
|
calls.
|
407
407
|
|
408
|
+
* <b>by_default</b>
|
409
|
+
|
410
|
+
Marks the expectation as a default. Default expectations act as
|
411
|
+
normal as long as there are no non-default expectations for the same
|
412
|
+
method name. As soon as a non-default expectation is defined, all
|
413
|
+
default expectations for that method name are ignored.
|
414
|
+
|
415
|
+
Default expectations allow you to setup a set of default behaviors
|
416
|
+
for various methods in the setup of a test suite, and then override
|
417
|
+
only the methods that need special handling in any given test.
|
418
|
+
|
408
419
|
* <b>mock</b>
|
409
420
|
|
410
421
|
Expectation constraints always return the expectation so that the
|
@@ -486,6 +497,19 @@ The following rules are used for argument matching:
|
|
486
497
|
|
487
498
|
will match any even integer.
|
488
499
|
|
500
|
+
* If you wish to match a method call where a block is given, add
|
501
|
+
<tt>Proc</tt> as the last argument to <tt>with</tt>.
|
502
|
+
|
503
|
+
Example:
|
504
|
+
|
505
|
+
m.should_receive(:foo).with(Integer,Proc).and_return(:got_block)
|
506
|
+
m.should_receive(:foo).with(Integer).and_return(:no_block)
|
507
|
+
|
508
|
+
will cause the mock to return the following:
|
509
|
+
|
510
|
+
m.foo(1) { } => returns :got_block
|
511
|
+
m.foo(1) => returns :no_block
|
512
|
+
|
489
513
|
=== Creating Partial Mocks
|
490
514
|
|
491
515
|
Sometimes it is useful to mock the behavior of one or two methods in an
|
@@ -526,11 +550,11 @@ Here's the test code:
|
|
526
550
|
# Woofer and return a mock woofer.
|
527
551
|
def setup
|
528
552
|
@dog = Dog.new
|
529
|
-
flexmock(dog, :bark => :grrr)
|
553
|
+
flexmock(@dog, :bark => :grrr)
|
530
554
|
end
|
531
555
|
|
532
556
|
def test_dog
|
533
|
-
assert_equal :
|
557
|
+
assert_equal :grrr, @dog.bark # Mocked Method
|
534
558
|
assert_equal :happy, @dog.wag # Normal Method
|
535
559
|
end
|
536
560
|
end
|
@@ -612,6 +636,40 @@ methods at the same time. E.g.
|
|
612
636
|
m.should_receive(:wag).at_least.once.and_return(:happy)
|
613
637
|
end
|
614
638
|
|
639
|
+
=== Default Expectations on Mocks
|
640
|
+
|
641
|
+
Sometimes you want to setup a bunch of default expectations that are
|
642
|
+
pretty much for a number of different tests. Then in the individual
|
643
|
+
tests, you would like to override the default behavior on just that
|
644
|
+
one method you are testing at the moment. You can do that by using
|
645
|
+
the <tt>by_default</tt> modifier.
|
646
|
+
|
647
|
+
In your test setup you might have:
|
648
|
+
|
649
|
+
def setup
|
650
|
+
@mock_dog = flexmock("Fido")
|
651
|
+
@mock_dog.should_receive(:tail => :a_tail, :bark => "woof").by_default
|
652
|
+
end
|
653
|
+
|
654
|
+
The behaviors for :tail and :bark are good for most of the tests, but
|
655
|
+
perhaps you wish to verify that :bark is called exactly once in a
|
656
|
+
given test. Since :bark by default has no count expectations, you can
|
657
|
+
override the default in the given test.
|
658
|
+
|
659
|
+
def test_something_where_bark_must_be_called_once
|
660
|
+
@mock_dog.should_receive(:bark => "woof").once
|
661
|
+
|
662
|
+
# At this point, the default for :bark is ignored,
|
663
|
+
# and the "woof" value will be returned.
|
664
|
+
|
665
|
+
# However, the default for :tail (which returns :a_tail)
|
666
|
+
# is still active.
|
667
|
+
end
|
668
|
+
|
669
|
+
By setting defaults, your individual tests don't have to concern
|
670
|
+
themselves with details of all the default setup. But the details of
|
671
|
+
the overrides are right there in the body of the test.
|
672
|
+
|
615
673
|
=== Mocking Law of Demeter Violations
|
616
674
|
|
617
675
|
The Law of Demeter says that you should only invoke methods on objects
|
@@ -684,6 +742,19 @@ beforehand.
|
|
684
742
|
end
|
685
743
|
end
|
686
744
|
|
745
|
+
=== Create a mock object that returns an undefined object for method calls
|
746
|
+
|
747
|
+
require 'flexmock/test_unit'
|
748
|
+
|
749
|
+
class TestUndefined < Test::Unit::TestCase
|
750
|
+
def test_undefined_values
|
751
|
+
m = flexmock("mock")
|
752
|
+
m.should_receive(:divide_by).with(0).
|
753
|
+
and_return_undefined
|
754
|
+
assert_equal FlexMock.undefined, m.divide_by(0)
|
755
|
+
end
|
756
|
+
end
|
757
|
+
|
687
758
|
=== Expect multiple queries and a single update
|
688
759
|
|
689
760
|
Multiple calls to the query method will be allows, and calls may have any
|
@@ -753,8 +824,8 @@ specified indirectly using a symbol.
|
|
753
824
|
rec.startup.once.ordered
|
754
825
|
rec.query("CPWR") { 12.3 }.once.ordered(:queries)
|
755
826
|
rec.query("MSFT") { 10.0 }.once.ordered(:queries)
|
756
|
-
rec.query(
|
757
|
-
rec.finish
|
827
|
+
rec.query(/^....$/) { 3.3 }.at_least.once.ordered(:queries)
|
828
|
+
rec.finish.once.ordered
|
758
829
|
end
|
759
830
|
# test code here using +db+.
|
760
831
|
end
|
@@ -808,12 +879,15 @@ ignoring.
|
|
808
879
|
# test code here
|
809
880
|
end
|
810
881
|
|
811
|
-
|
812
|
-
|
882
|
+
When +should_ignore_missing+ is enabled, ignored missing methods will
|
883
|
+
return an undefined object. Any operation on the undefined object
|
884
|
+
will return the undefined object.
|
813
885
|
|
814
886
|
=== Mock just one method on an existing object
|
815
887
|
|
816
|
-
The Portfolio class calculate the value of a set of stocks by talking
|
888
|
+
The Portfolio class calculate the value of a set of stocks by talking
|
889
|
+
to a quote service via a web service. Since we don't want to use a
|
890
|
+
real web service in our unit tests, we will mock the quote service.
|
817
891
|
|
818
892
|
def test_portfolio_value
|
819
893
|
flexmock(QuoteService).new_instances do |m|
|
data/Rakefile
CHANGED
@@ -19,7 +19,7 @@ require 'rake/contrib/rubyforgepublisher'
|
|
19
19
|
CLEAN.include('*.tmp')
|
20
20
|
CLOBBER.include("html", 'pkg')
|
21
21
|
|
22
|
-
PKG_VERSION = '0.
|
22
|
+
PKG_VERSION = '0.8.0'
|
23
23
|
|
24
24
|
PKG_FILES = FileList[
|
25
25
|
'[A-Z]*',
|
@@ -200,15 +200,15 @@ end
|
|
200
200
|
|
201
201
|
# Tagging ------------------------------------------------------------
|
202
202
|
|
203
|
-
module Tags
|
204
|
-
|
205
|
-
end
|
203
|
+
# module Tags
|
204
|
+
# RUBY_FILES = FileList['**/*.rb'].exclude("pkg")
|
205
|
+
# end
|
206
206
|
|
207
|
-
namespace "tags" do
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
end
|
207
|
+
# namespace "tags" do
|
208
|
+
# task :emacs => Tags::RUBY_FILES do
|
209
|
+
# puts "Making Emacs TAGS file"
|
210
|
+
# sh "xctags -e #{Tags::RUBY_FILES}", :verbose => false
|
211
|
+
# end
|
212
|
+
# end
|
213
213
|
|
214
|
-
task :tags => ["tags:emacs"]
|
214
|
+
# task :tags => ["tags:emacs"]
|