flexmock 0.6.2 → 0.6.3
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 → CHANGES} +21 -0
- data/README +59 -11
- data/Rakefile +19 -4
- data/TAGS +461 -0
- data/doc/releases/flexmock-0.6.3.rdoc +111 -0
- data/lib/flexmock/activerecord.rb +27 -0
- data/lib/flexmock/core.rb +6 -1
- data/lib/flexmock/mock_container.rb +11 -7
- data/lib/flexmock/partial_mock.rb +67 -22
- data/test/rspec_integration/integration_spec.rb +1 -1
- data/test/test_container_methods.rb +2 -2
- data/test/test_extended_should_receive.rb +1 -1
- data/test/test_flexmodel.rb +40 -0
- data/test/test_partial_mock.rb +96 -0
- metadata +9 -4
data/{CHANGELOG → CHANGES}
RENAMED
@@ -1,5 +1,26 @@
|
|
1
1
|
= Changes for FlexMock
|
2
2
|
|
3
|
+
== Version 0.6.3
|
4
|
+
|
5
|
+
* Added flexmodel() for better support of mocking ActiveRecord models.
|
6
|
+
|
7
|
+
* Fixed comment for singleton?
|
8
|
+
|
9
|
+
* Fixed coverage report for the partial mocking class.
|
10
|
+
|
11
|
+
* Fixed bug when partial mock objects reported they respond to a
|
12
|
+
method but they actually didn't.
|
13
|
+
|
14
|
+
* The flexmock() method now _always_ returns a combination domain/mock
|
15
|
+
object. For partial mocks, this implies that the domain object now
|
16
|
+
has mock support methods on it (e.g. should_receive).
|
17
|
+
|
18
|
+
* Safe mode for partials was introduced for the small number of cases
|
19
|
+
where mock support methods in the domain object would cause
|
20
|
+
problems.
|
21
|
+
|
22
|
+
* Internally renamed PartialMock to PartialMockProxy.
|
23
|
+
|
3
24
|
== Version 0.6.2
|
4
25
|
|
5
26
|
* flexmock() with a block now always returns the domain object.
|
data/README
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
FlexMock is a simple, but flexible, mock object library for Ruby unit
|
4
4
|
testing.
|
5
5
|
|
6
|
-
Version :: 0.6.2
|
6
|
+
Version :: 0.6.2.1
|
7
7
|
|
8
8
|
= Links
|
9
9
|
|
@@ -53,7 +53,8 @@ Here's the complete example:
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
You can find an extended example of FlexMock in {Google
|
56
|
+
You can find an extended example of FlexMock in {Google
|
57
|
+
Example}[http://flexmock.rubyforge.org/files/doc/GoogleExample_rdoc.html].
|
57
58
|
|
58
59
|
== Test::Unit Integration
|
59
60
|
|
@@ -94,53 +95,100 @@ FlexMock also supports integration with the RSpec behavior specification framewo
|
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
97
|
-
If you wish to try this prior to the release of RSpec 0.9.0, check out
|
98
|
+
If you wish to try this prior to the release of RSpec 0.9.0, check out
|
99
|
+
the trunk of the RSpec subversion repository.
|
98
100
|
|
99
101
|
== Quick Reference
|
100
102
|
|
101
103
|
=== Creating Mock Objects
|
102
104
|
|
103
|
-
The +flexmock+ method is used to create mocks in various
|
105
|
+
The +flexmock+ method is used to create mocks in various
|
106
|
+
configurations. Here's a quick rundown of the most common options.
|
107
|
+
See FlexMock::MockContainer#flexmock for more details.
|
104
108
|
|
105
|
-
* <b>
|
109
|
+
* <b>mock = flexmock("joe")</b>
|
106
110
|
|
107
111
|
Create a mock object named "joe" (the name is used in reporting errors).
|
108
112
|
|
109
|
-
* <b>
|
113
|
+
* <b>mock = flexmock(:foo => :bar, :baz => :froz)</b>
|
110
114
|
|
111
115
|
Create a mock object and define two mocked methods (:foo and :baz) that
|
112
116
|
return the values :bar and :froz respectively. This is useful when creating
|
113
117
|
mock objects with just a few methods and simple return values.
|
114
118
|
|
115
|
-
* <b>
|
119
|
+
* <b>mock = flexmock("joe", :foo => :bar, :bar => :froz)</b>
|
116
120
|
|
117
121
|
You can combine the mock name and an expectation hash in the same call to
|
118
122
|
flexmock.
|
119
123
|
|
120
|
-
* <b>
|
124
|
+
* <b>partial_mock = flexmock(real_object)</b>
|
121
125
|
|
122
126
|
If you you give +flexmock+ a real object in the argument list, it will treat
|
123
127
|
that real object as a base for a partial mock object. The return value +m+
|
124
128
|
may be used to set expectations. The real_object should be used in the
|
125
129
|
reference portion of the test.
|
126
130
|
|
127
|
-
* <b>
|
131
|
+
* <b>partial_mock = flexmock(real_object, "name", :foo => :baz)</b>
|
128
132
|
|
129
133
|
Names and expectation hashes may be used with partial mocks as well.
|
130
134
|
|
131
|
-
* <b>
|
135
|
+
* <b>partial_mock = flexmock(:base, real_string_object)</b>
|
132
136
|
|
133
137
|
Since Strings (and Symbols for that matter) are used for mock names,
|
134
138
|
FlexMock will not recognize them as the base for a partial mock. To force a
|
135
139
|
string to be used as a partial mock base, proceed the string object in the
|
136
140
|
calling sequence with :base.
|
137
141
|
|
138
|
-
* <b>
|
142
|
+
* <b>partial_mock = flexmock(:safe, real_object) { |mock| mock.should_receive(...) }</b>
|
143
|
+
|
144
|
+
When mocking real objects (i.e. "partial mocks"), FlexMock will add
|
145
|
+
a handful of mock related methods to the actual object (see below
|
146
|
+
for list of method names). If one or more of these added methods
|
147
|
+
collide with an existing method on the partial mock, then there are problems.
|
148
|
+
|
149
|
+
FlexMock offers a "safe" mode for partial mocks that does not add
|
150
|
+
these methods. Indicate safe mode by passing the symbol :safe as
|
151
|
+
the first argument of flexmock. A block <em>is required</em> when
|
152
|
+
using safe mode (the partial_mock returned in safe mode does not
|
153
|
+
have a +should_receive+ method).
|
154
|
+
|
155
|
+
The methods added to partial mocks in non-safe mode are:
|
156
|
+
|
157
|
+
* should_receive
|
158
|
+
* new_instances
|
159
|
+
* any_instance (note: deprecated)
|
160
|
+
* mock
|
161
|
+
* mock_teardown
|
162
|
+
* mock_setup
|
163
|
+
|
164
|
+
* <b>mock = flexmock(...) { |mock| mock.should_receive(...) }</b>
|
139
165
|
|
140
166
|
If a block is given to any of the +flexmock+ forms, the mock object will be
|
141
167
|
passed to the block as an argument. Code in the block can set the desired
|
142
168
|
expectations for the mock object.
|
143
169
|
|
170
|
+
* <b>mock_model = flexmodel(YourModel, ...) { |mock| mock.should_receive(...) }</b>
|
171
|
+
|
172
|
+
The flexmodel() method will return a pure mock (not a partial mock)
|
173
|
+
that will have some ActiveRecord specific methods defined.
|
174
|
+
YourModel should be the class of an ActiveRecord model. These
|
175
|
+
predefined methods make it a bit easier to mock out ActiveRecord
|
176
|
+
model objects in a Rails application. Other that the predefined
|
177
|
+
mocked methods, the mock returned is a standard FlexMock mock
|
178
|
+
object.
|
179
|
+
|
180
|
+
The predefined mocked methods are:
|
181
|
+
|
182
|
+
* id -- returns a unique ID for each mocked model.
|
183
|
+
* to_params -- returns a stringified version of the id.
|
184
|
+
* new_record? -- returns false.
|
185
|
+
* errors -- returns an empty (mocked) errors object.
|
186
|
+
* is_a?(other) -- returns true if other == YourModel.
|
187
|
+
* class -- returns YourModel.
|
188
|
+
|
189
|
+
The flexmodel() method is optional. You must require
|
190
|
+
'flexmock/activerecord' to enable it.
|
191
|
+
|
144
192
|
<b>NOTE:</b> Versions of FlexMock prior to 0.6.0 used +flexstub+ to create partial mocks. The +flexmock+ method now assumes all the functionality that was spread out between two different methods. +flexstub+ is still available for backward compatibility.
|
145
193
|
|
146
194
|
=== Expectation Declarators
|
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
# and distribution of modified versions of this work as long as the
|
9
9
|
# above copyright notice is included.
|
10
10
|
#+++
|
11
|
-
|
11
|
+
task :noop
|
12
12
|
require 'rubygems'
|
13
13
|
require 'rake/gempackagetask'
|
14
14
|
require 'rake/clean'
|
@@ -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.6.
|
22
|
+
PKG_VERSION = '0.6.3'
|
23
23
|
|
24
24
|
PKG_FILES = FileList[
|
25
25
|
'[A-Z]*',
|
@@ -31,7 +31,7 @@ PKG_FILES = FileList[
|
|
31
31
|
|
32
32
|
RDOC_FILES = FileList[
|
33
33
|
'README',
|
34
|
-
'
|
34
|
+
'CHANGES',
|
35
35
|
'lib/**/*.rb',
|
36
36
|
'doc/**/*.rdoc',
|
37
37
|
]
|
@@ -189,7 +189,7 @@ task :specs do
|
|
189
189
|
end
|
190
190
|
|
191
191
|
task :tag do
|
192
|
-
sh
|
192
|
+
sh "svn copy #{SVNHOME}/trunk #{SVNHOME}/tags/rel-#{PKG_VERSION} -m 'Release #{PKG_VERSION}'"
|
193
193
|
end
|
194
194
|
|
195
195
|
RUBY_FILES = FileList['**/*.rb']
|
@@ -197,3 +197,18 @@ RUBY_FILES.exclude(/^pkg/)
|
|
197
197
|
task :dbg do
|
198
198
|
RUBY_FILES.egrep(/DBG/)
|
199
199
|
end
|
200
|
+
|
201
|
+
# Tagging ------------------------------------------------------------
|
202
|
+
|
203
|
+
module Tags
|
204
|
+
RUBY_FILES = FileList['**/*.rb'].exclude("pkg")
|
205
|
+
end
|
206
|
+
|
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
|
+
|
214
|
+
task :tags => ["tags:emacs"]
|
data/TAGS
ADDED
@@ -0,0 +1,461 @@
|
|
1
|
+
|
2
|
+
install.rb,29
|
3
|
+
def indir(newdir)indir7,68
|
4
|
+
|
5
|
+
doc/jamis.rb,43
|
6
|
+
module RDocRDoc1,0
|
7
|
+
module PagePage2,12
|
8
|
+
|
9
|
+
lib/flexmock.rb,0
|
10
|
+
|
11
|
+
lib/flexmock/argument_matchers.rb,424
|
12
|
+
class FlexMockFlexMock14,338
|
13
|
+
class AnyMatcherAnyMatcher17,445
|
14
|
+
def ===(target)===18,464
|
15
|
+
def inspectinspect21,503
|
16
|
+
class EqualMatcherEqualMatcher28,655
|
17
|
+
def initialize(obj)initialize29,676
|
18
|
+
def ===(target)===32,725
|
19
|
+
def inspectinspect35,774
|
20
|
+
class ProcMatcherProcMatcher44,985
|
21
|
+
def initialize(&block)initialize45,1005
|
22
|
+
def ===(target)===48,1061
|
23
|
+
def inspectinspect51,1115
|
24
|
+
|
25
|
+
lib/flexmock/argument_types.rb,154
|
26
|
+
class FlexMockFlexMock14,350
|
27
|
+
module ArgumentTypesArgumentTypes21,643
|
28
|
+
def anyany23,726
|
29
|
+
def eq(obj)eq29,853
|
30
|
+
def on(&block)on36,1053
|
31
|
+
|
32
|
+
lib/flexmock/base.rb,0
|
33
|
+
|
34
|
+
lib/flexmock/composite.rb,30
|
35
|
+
class FlexMockFlexMock8,133
|
36
|
+
|
37
|
+
lib/flexmock/core.rb,736
|
38
|
+
class FlexMockFlexMock44,1236
|
39
|
+
def initialize(name="unknown")initialize50,1435
|
40
|
+
def mock_handle(sym, expected_count=nil, &block) # :nodoc:mock_handle66,1959
|
41
|
+
def mock_verifymock_verify72,2199
|
42
|
+
def mock_teardownmock_teardown83,2428
|
43
|
+
def mock_allocate_ordermock_allocate_order87,2504
|
44
|
+
def should_ignore_missingshould_ignore_missing92,2612
|
45
|
+
def method_missing(sym, *args, &block)method_missing98,2787
|
46
|
+
def respond_to?(sym)respond_to?113,3220
|
47
|
+
def method(sym)method118,3375
|
48
|
+
def should_receive(*args)should_receive147,4395
|
49
|
+
def should_expectshould_expect169,5078
|
50
|
+
def mock_wrap(&block)mock_wrap177,5268
|
51
|
+
def override_existing_method(sym)override_existing_method191,5819
|
52
|
+
def sclasssclass200,6039
|
53
|
+
|
54
|
+
lib/flexmock/core_class_methods.rb,239
|
55
|
+
class FlexMockFlexMock14,337
|
56
|
+
def should_receive(args) # :nodoc:should_receive26,798
|
57
|
+
def use(*names)use61,2024
|
58
|
+
def format_args(sym, args) # :nodoc:format_args77,2444
|
59
|
+
def check(msg, &block) # :nodoc:check87,2745
|
60
|
+
|
61
|
+
lib/flexmock/default_framework_adapter.rb,345
|
62
|
+
class FlexMockFlexMock14,337
|
63
|
+
class DefaultFrameworkAdapterDefaultFrameworkAdapter15,352
|
64
|
+
def assert_block(msg, &block)assert_block16,384
|
65
|
+
def assert_equal(a, b, msg=nil)assert_equal22,497
|
66
|
+
class AssertionFailedError < StandardError; endAssertionFailedError26,597
|
67
|
+
def assertion_failed_errorassertion_failed_error27,649
|
68
|
+
|
69
|
+
lib/flexmock/expectation.rb,1501
|
70
|
+
class FlexMockFlexMock14,337
|
71
|
+
class ExpectationExpectation28,872
|
72
|
+
def initialize(mock, sym)initialize34,1018
|
73
|
+
def to_sto_s46,1323
|
74
|
+
def verify_call(*args)verify_call52,1505
|
75
|
+
def eligible?eligible?60,1759
|
76
|
+
def validate_ordervalidate_order65,1880
|
77
|
+
def mock_verifymock_verify77,2317
|
78
|
+
def match_args(args)match_args85,2510
|
79
|
+
def match_arg(expected, actual)match_arg94,2856
|
80
|
+
def with(*args)with101,3085
|
81
|
+
def with_no_argswith_no_args107,3219
|
82
|
+
def with_any_argswith_any_args113,3352
|
83
|
+
def and_return(*args, &block)and_return144,4361
|
84
|
+
def and_raise(exception, *args)and_raise174,5267
|
85
|
+
def zero_or_more_timeszero_or_more_times180,5450
|
86
|
+
def times(limit)times187,5673
|
87
|
+
def nevernever196,6020
|
88
|
+
def onceonce203,6235
|
89
|
+
def twicetwice210,6450
|
90
|
+
def at_leastat_least222,6776
|
91
|
+
def at_mostat_most235,7155
|
92
|
+
def ordered(group_name=nil)ordered264,8424
|
93
|
+
class CompositeExpectationCompositeExpectation281,9010
|
94
|
+
def initializeinitialize284,9084
|
95
|
+
def add(expectation)add289,9180
|
96
|
+
def method_missing(sym, *args, &block)method_missing294,9321
|
97
|
+
def order_numberorder_number305,9700
|
98
|
+
def mockmock310,9810
|
99
|
+
def should_receive(*args, &block)should_receive316,9978
|
100
|
+
def to_sto_s321,10124
|
101
|
+
class ExpectationRecorderExpectationRecorder335,10582
|
102
|
+
def initializeinitialize338,10642
|
103
|
+
def method_missing(sym, *args, &block)method_missing343,10753
|
104
|
+
def apply(mock)apply351,11029
|
105
|
+
|
106
|
+
lib/flexmock/expectation_director.rb,236
|
107
|
+
class FlexMockFlexMock14,337
|
108
|
+
class ExpectationDirectorExpectationDirector20,549
|
109
|
+
def initialize(sym)initialize23,633
|
110
|
+
def call(*args)call37,1161
|
111
|
+
def <<(expectation)<<46,1504
|
112
|
+
def mock_verifymock_verify52,1663
|
113
|
+
|
114
|
+
lib/flexmock/mock_container.rb,488
|
115
|
+
class FlexMockFlexMock14,337
|
116
|
+
module MockContainerMockContainer24,743
|
117
|
+
def flexmock_teardownflexmock_teardown27,905
|
118
|
+
def flexmock_verifyflexmock_verify34,1063
|
119
|
+
def flexmock_closeflexmock_close43,1354
|
120
|
+
def flexmock(*args)flexmock112,4620
|
121
|
+
def flexmock_make_partial_proxy(obj, name)flexmock_make_partial_proxy146,5494
|
122
|
+
def flexmock_quick_define(mock, defs)flexmock_quick_define155,5799
|
123
|
+
def flexmock_remember(mocking_object)flexmock_remember163,6025
|
124
|
+
|
125
|
+
lib/flexmock/noop.rb,0
|
126
|
+
|
127
|
+
lib/flexmock/partial_mock.rb,1057
|
128
|
+
class FlexMockFlexMock14,337
|
129
|
+
class PartialMockPartialMock25,954
|
130
|
+
def initialize(obj, mock)initialize30,1105
|
131
|
+
def should_receive(*args)should_receive60,2218
|
132
|
+
def new_instances(*allocators, &block)new_instances88,3171
|
133
|
+
def any_instance(&block)any_instance106,3804
|
134
|
+
def invoke_original(method, args)invoke_original113,4036
|
135
|
+
def mock_verifymock_verify121,4330
|
136
|
+
def mock_teardownmock_teardown126,4458
|
137
|
+
def mock_allocate_ordermock_allocate_order138,4804
|
138
|
+
def sclasssclass145,4923
|
139
|
+
def singleton?(method_name)singleton?151,5064
|
140
|
+
def hide_existing_method(method_name)hide_existing_method161,5526
|
141
|
+
def create_alias_for_existing_method(method_name)create_alias_for_existing_method181,6240
|
142
|
+
def define_proxy_method(method_name)define_proxy_method199,6759
|
143
|
+
def restore_original_definition(method_name)restore_original_definition220,7459
|
144
|
+
def remove_current_method(method_name)remove_current_method232,7823
|
145
|
+
def detached?detached?237,7984
|
146
|
+
def new_name(old_name)new_name242,8092
|
147
|
+
|
148
|
+
lib/flexmock/recorder.rb,271
|
149
|
+
class FlexMockFlexMock14,347
|
150
|
+
class RecorderRecorder20,523
|
151
|
+
def initialize(mock)initialize24,629
|
152
|
+
def should_be_strict(is_strict=true)should_be_strict48,1561
|
153
|
+
def strict?strict?53,1675
|
154
|
+
def method_missing(sym, *args, &block)method_missing59,1805
|
155
|
+
|
156
|
+
lib/flexmock/rspec.rb,341
|
157
|
+
class FlexMockFlexMock14,337
|
158
|
+
class RSpecFrameworkAdapterRSpecFrameworkAdapter16,355
|
159
|
+
def assert_block(msg, &block)assert_block17,385
|
160
|
+
def assert_equal(a, b, msg=nil)assert_equal21,481
|
161
|
+
class AssertionFailedError < StandardError; endAssertionFailedError26,644
|
162
|
+
def assertion_failed_errorassertion_failed_error27,696
|
163
|
+
|
164
|
+
lib/flexmock/test_unit.rb,120
|
165
|
+
module TestTest14,354
|
166
|
+
module UnitUnit15,366
|
167
|
+
class TestCaseTestCase16,380
|
168
|
+
def teardownteardown25,695
|
169
|
+
|
170
|
+
lib/flexmock/test_unit_integration.rb,227
|
171
|
+
class FlexMockFlexMock15,357
|
172
|
+
module TestCaseTestCase29,917
|
173
|
+
def teardownteardown35,1092
|
174
|
+
class TestUnitFrameworkAdapterTestUnitFrameworkAdapter45,1301
|
175
|
+
def assertion_failed_errorassertion_failed_error47,1369
|
176
|
+
|
177
|
+
lib/flexmock/validators.rb,545
|
178
|
+
class FlexMockFlexMock14,337
|
179
|
+
class CountValidatorCountValidator19,473
|
180
|
+
def initialize(expectation, limit)initialize20,496
|
181
|
+
def eligible?(n)eligible?28,752
|
182
|
+
class ExactCountValidator < CountValidatorExactCountValidator36,917
|
183
|
+
def validate(n)validate39,1041
|
184
|
+
class AtLeastCountValidator < CountValidatorAtLeastCountValidator48,1332
|
185
|
+
def validate(n)validate51,1458
|
186
|
+
def eligible?(n)eligible?61,1875
|
187
|
+
class AtMostCountValidator < CountValidatorAtMostCountValidator69,2058
|
188
|
+
def validate(n)validate71,2173
|
189
|
+
|
190
|
+
test/test_container_methods.rb,1097
|
191
|
+
class TestFlexmockContainerMethods < Test::Unit::TestCaseTestFlexmockContainerMethods16,410
|
192
|
+
def test_simple_mock_creationtest_simple_mock_creation19,498
|
193
|
+
def test_mock_with_nametest_mock_with_name25,639
|
194
|
+
def test_mock_with_symbol_nametest_mock_with_symbol_name32,848
|
195
|
+
def test_mock_with_hashtest_mock_with_hash39,1063
|
196
|
+
def test_mock_with_name_and_hashtest_mock_with_name_and_hash45,1208
|
197
|
+
def test_mock_with_name_hash_and_blocktest_mock_with_name_hash_and_block54,1516
|
198
|
+
def test_basic_stubtest_basic_stub62,1739
|
199
|
+
def test_basic_stub_with_nametest_basic_stub_with_name69,1901
|
200
|
+
def test_stub_with_quick_definitionstest_stub_with_quick_definitions77,2161
|
201
|
+
def test_stub_with_name_quick_definitionstest_stub_with_name_quick_definitions83,2305
|
202
|
+
def test_stubs_are_auto_verifiedtest_stubs_are_auto_verified92,2629
|
203
|
+
def test_stubbing_a_stringtest_stubbing_a_string99,2831
|
204
|
+
def test_multiple_stubs_work_with_same_PartialMocktest_multiple_stubs_work_with_same_PartialMock105,2958
|
205
|
+
def test_multiple_stubs_layer_behaviortest_multiple_stubs_layer_behavior112,3123
|
206
|
+
|
207
|
+
test/test_default_framework_adapter.rb,475
|
208
|
+
class TestFlexmockDefaultFrameworkAdapter < Test::Unit::TestCaseTestFlexmockDefaultFrameworkAdapter15,352
|
209
|
+
def setupsetup16,417
|
210
|
+
def test_assert_block_raises_exception test_assert_block_raises_exception20,489
|
211
|
+
def test_assert_block_doesnt_raise_exceptiontest_assert_block_doesnt_raise_exception26,684
|
212
|
+
def test_assert_equal_doesnt_raise_exceptiontest_assert_equal_doesnt_raise_exception30,794
|
213
|
+
def test_assert_equal_can_failtest_assert_equal_can_fail34,900
|
214
|
+
|
215
|
+
test/test_example.rb,278
|
216
|
+
class TemperatureSamplerTemperatureSampler15,352
|
217
|
+
def initialize(sensor)initialize16,377
|
218
|
+
def average_tempaverage_temp20,430
|
219
|
+
class TestTemperatureSampler < Test::Unit::TestCaseTestTemperatureSampler27,562
|
220
|
+
def test_tempurature_samplertest_tempurature_sampler28,614
|
221
|
+
|
222
|
+
test/test_extended_should_receive.rb,797
|
223
|
+
module ExtendedShouldReceiveTestsExtendedShouldReceiveTests15,352
|
224
|
+
def test_accepts_expectation_hashtest_accepts_expectation_hash16,386
|
225
|
+
def test_accepts_list_of_methodstest_accepts_list_of_methods22,552
|
226
|
+
def test_contraints_apply_to_all_expectationstest_contraints_apply_to_all_expectations29,712
|
227
|
+
def test_count_contraints_apply_to_all_expectationstest_count_contraints_apply_to_all_expectations36,1001
|
228
|
+
def test_multiple_should_receives_are_allowedtest_multiple_should_receives_are_allowed42,1200
|
229
|
+
class TestExtendedShouldReceiveOnFullMocks < Test::Unit::TestCaseTestExtendedShouldReceiveOnFullMocks50,1417
|
230
|
+
def setupsetup54,1552
|
231
|
+
class TestExtendedShouldReceiveOnPartialMocks < Test::Unit::TestCaseTestExtendedShouldReceiveOnPartialMocks61,1622
|
232
|
+
def setupsetup65,1760
|
233
|
+
|
234
|
+
test/test_mock.rb,1777
|
235
|
+
class TestFlexMock < Test::Unit::TestCaseTestFlexMock15,352
|
236
|
+
def setupsetup16,394
|
237
|
+
def test_handletest_handle20,438
|
238
|
+
def test_handle_no_blocktest_handle_no_block27,576
|
239
|
+
def test_called_with_blocktest_called_with_block33,700
|
240
|
+
def test_return_valuetest_return_value40,892
|
241
|
+
def test_handle_missing_methodtest_handle_missing_method45,991
|
242
|
+
def test_ignore_missing_methodtest_ignore_missing_method53,1216
|
243
|
+
def test_good_countstest_good_counts59,1347
|
244
|
+
def test_bad_countstest_bad_counts67,1476
|
245
|
+
def test_undetermined_countstest_undetermined_counts78,1683
|
246
|
+
def test_zero_countstest_zero_counts87,1822
|
247
|
+
def test_file_io_with_usetest_file_io_with_use96,1995
|
248
|
+
def count_lines(stream)count_lines104,2193
|
249
|
+
def test_usetest_use112,2311
|
250
|
+
def test_failures_during_usetest_failures_during_use121,2462
|
251
|
+
def test_sequential_valuestest_sequential_values131,2675
|
252
|
+
def test_respond_to_returns_false_for_non_handled_methodstest_respond_to_returns_false_for_non_handled_methods140,2903
|
253
|
+
def test_respond_to_returns_true_for_explicit_methodstest_respond_to_returns_true_for_explicit_methods144,3038
|
254
|
+
def test_respond_to_returns_true_for_missing_methods_when_ignoring_missingtest_respond_to_returns_true_for_missing_methods_when_ignoring_missing149,3191
|
255
|
+
def test_respond_to_returns_true_for_missing_methods_when_ignoring_missing_using_shouldtest_respond_to_returns_true_for_missing_methods_when_ignoring_missing_using_should154,3372
|
256
|
+
def test_method_proc_raises_error_on_unknowntest_method_proc_raises_error_on_unknown159,3568
|
257
|
+
def test_method_returns_callable_proctest_method_returns_callable_proc165,3686
|
258
|
+
def test_method_returns_do_nothing_proc_for_missing_methodstest_method_returns_do_nothing_proc_for_missing_methods174,3936
|
259
|
+
|
260
|
+
test/test_naming.rb,404
|
261
|
+
class TestNaming < Test::Unit::TestCaseTestNaming15,352
|
262
|
+
def test_nametest_name16,392
|
263
|
+
def test_name_in_no_handler_found_errortest_name_in_no_handler_found_error21,475
|
264
|
+
def test_name_in_received_count_errortest_name_in_received_count_error30,705
|
265
|
+
def test_naming_with_usetest_naming_with_use39,935
|
266
|
+
def test_naming_with_multiple_mocks_in_usetest_naming_with_multiple_mocks_in_use45,1048
|
267
|
+
|
268
|
+
test/test_new_instances.rb,2475
|
269
|
+
class TestNewInstances < Test::Unit::TestCaseTestNewInstances15,352
|
270
|
+
class DogDog18,430
|
271
|
+
def barkbark19,442
|
272
|
+
def wagwag22,475
|
273
|
+
def self.makemake25,507
|
274
|
+
class CatCat30,550
|
275
|
+
def initialize(name, &block)initialize32,584
|
276
|
+
class ConnectionConnection38,692
|
277
|
+
def initialize(*args)initialize39,711
|
278
|
+
def send(args)send42,779
|
279
|
+
def post(args)post45,823
|
280
|
+
def test_new_instances_allows_stubbing_of_existing_methodstest_new_instances_allows_stubbing_of_existing_methods50,874
|
281
|
+
def test_any_instance_still_works_for_backwards_compatibilitytest_any_instance_still_works_for_backwards_compatibility58,1097
|
282
|
+
def test_new_instances_stubs_still_have_existing_methodstest_new_instances_stubs_still_have_existing_methods69,1413
|
283
|
+
def test_new_instances_will_pass_args_to_newtest_new_instances_will_pass_args_to_new77,1628
|
284
|
+
def test_new_gets_block_after_restubbingtest_new_gets_block_after_restubbing90,2034
|
285
|
+
def test_new_instances_stub_verification_happens_on_teardowntest_new_instances_stub_verification_happens_on_teardown103,2359
|
286
|
+
def test_new_instances_reports_error_on_non_classestest_new_instances_reports_error_on_non_classes113,2722
|
287
|
+
def test_can_stub_objects_created_with_allocate_instead_of_newtest_can_stub_objects_created_with_allocate_instead_of_new123,3004
|
288
|
+
def test_can_stub_objects_created_with_arbitrary_class_methodstest_can_stub_objects_created_with_arbitrary_class_methods131,3236
|
289
|
+
def test_stubbing_arbitrary_class_methods_leaves_new_alonetest_stubbing_arbitrary_class_methods_leaves_new_alone138,3461
|
290
|
+
def test_stubbing_new_and_allocate_doesnt_double_stub_objects_on_newtest_stubbing_new_and_allocate_doesnt_double_stub_objects_on_new145,3676
|
291
|
+
def test_stubbing_new_and_allocate_doesnt_double_stub_objects_on_allocatetest_stubbing_new_and_allocate_doesnt_double_stub_objects_on_allocate154,3878
|
292
|
+
def test_blocks_on_new_do_not_have_stubs_installedtest_blocks_on_new_do_not_have_stubs_installed167,4345
|
293
|
+
def test_new_instances_accept_chained_expectationstest_new_instances_accept_chained_expectations181,4685
|
294
|
+
def test_fancy_use_of_chained_should_receivedtest_fancy_use_of_chained_should_received189,4957
|
295
|
+
def test_writable_accessorstest_writable_accessors194,5114
|
296
|
+
def test_ordering_can_be_specifiedtest_ordering_can_be_specified200,5261
|
297
|
+
def test_ordering_can_be_specified_in_groupstest_ordering_can_be_specified_in_groups208,5457
|
298
|
+
def redirect_errorredirect_error218,5752
|
299
|
+
|
300
|
+
test/test_partial_mock.rb,3046
|
301
|
+
class TestStubbing < Test::Unit::TestCaseTestStubbing16,372
|
302
|
+
class DogDog19,446
|
303
|
+
def barkbark20,458
|
304
|
+
def Dog.createcreate23,491
|
305
|
+
def test_stub_command_add_behavior_to_arbitrary_objectstest_stub_command_add_behavior_to_arbitrary_objects28,540
|
306
|
+
def test_stub_command_can_configure_via_blocktest_stub_command_can_configure_via_block34,726
|
307
|
+
def test_stubbed_methods_can_take_blockstest_stubbed_methods_can_take_blocks42,925
|
308
|
+
def test_multiple_stubs_on_the_same_object_reuse_the_same_partial_mocktest_multiple_stubs_on_the_same_object_reuse_the_same_partial_mock49,1152
|
309
|
+
def test_multiple_methods_can_be_stubbedtest_multiple_methods_can_be_stubbed54,1301
|
310
|
+
def test_original_behavior_can_be_restoredtest_original_behavior_can_be_restored62,1555
|
311
|
+
def test_original_missing_behavior_can_be_restoredtest_original_missing_behavior_can_be_restored72,1888
|
312
|
+
def test_multiple_stubs_on_single_method_can_be_restored_missing_methodtest_multiple_stubs_on_single_method_can_be_restored_missing_method81,2163
|
313
|
+
def test_original_behavior_is_restored_when_multiple_methods_are_mockedtest_original_behavior_is_restored_when_multiple_methods_are_mocked92,2570
|
314
|
+
def test_original_behavior_is_restored_on_class_objectstest_original_behavior_is_restored_on_class_objects101,2895
|
315
|
+
def test_original_behavior_is_restored_on_singleton_methodstest_original_behavior_is_restored_on_singleton_methods108,3142
|
316
|
+
def obj.hi() :hello endhi110,3225
|
317
|
+
def test_original_behavior_is_restored_on_singleton_methods_with_multiple_stubstest_original_behavior_is_restored_on_singleton_methods_with_multiple_stubs118,3417
|
318
|
+
def obj.hi(n) "hello#{n}" endhi120,3520
|
319
|
+
def test_original_behavior_is_restored_on_nonsingleton_methods_with_multiple_stubstest_original_behavior_is_restored_on_nonsingleton_methods_with_multiple_stubs130,3837
|
320
|
+
def test_stubbing_file_shouldnt_break_writingtest_stubbing_file_shouldnt_break_writing146,4327
|
321
|
+
def test_original_behavior_is_restored_even_when_errorstest_original_behavior_is_restored_even_when_errors162,4762
|
322
|
+
def m.mock_verify() endmock_verify170,5073
|
323
|
+
def test_not_calling_stubbed_method_is_an_errortest_not_calling_stubbed_method_is_an_error173,5108
|
324
|
+
def test_mock_is_verified_when_the_stub_is_verifiedtest_mock_is_verified_when_the_stub_is_verified182,5333
|
325
|
+
def test_stub_can_have_explicit_nametest_stub_can_have_explicit_name191,5599
|
326
|
+
def test_unamed_stub_will_use_default_naming_conventiontest_unamed_stub_will_use_default_naming_convention197,5766
|
327
|
+
def test_partials_can_be_defined_in_a_blocktest_partials_can_be_defined_in_a_block203,5950
|
328
|
+
def test_partials_defining_block_return_real_obj_not_proxytest_partials_defining_block_return_real_obj_not_proxy211,6137
|
329
|
+
class LiarLiar218,6331
|
330
|
+
def respond_to?(method_name)respond_to?219,6344
|
331
|
+
def test_liar_actually_liestest_liar_actually_lies229,6513
|
332
|
+
def test_partial_mock_where_respond_to_is_true_yet_method_is_not_theretest_partial_mock_where_respond_to_is_true_yet_method_is_not_there234,6612
|
333
|
+
|
334
|
+
test/test_record_mode.rb,1428
|
335
|
+
module FailureAssertionFailureAssertion15,366
|
336
|
+
def assert_failsassert_fails17,402
|
337
|
+
class TestRecordMode < Test::Unit::TestCaseTestRecordMode24,513
|
338
|
+
def test_recording_mode_workstest_recording_mode_works28,623
|
339
|
+
def test_arguments_are_passed_to_recording_mode_blocktest_arguments_are_passed_to_recording_mode_block37,815
|
340
|
+
def test_recording_mode_handles_multiple_returnstest_recording_mode_handles_multiple_returns49,1109
|
341
|
+
def test_recording_mode_does_not_specify_ordertest_recording_mode_does_not_specify_order60,1376
|
342
|
+
def test_recording_mode_gets_block_args_tootest_recording_mode_gets_block_args_too71,1622
|
343
|
+
def test_recording_mode_should_validate_args_with_equalstest_recording_mode_should_validate_args_with_equals84,1934
|
344
|
+
def test_recording_mode_should_allow_arg_contraint_validationtest_recording_mode_should_allow_arg_contraint_validation95,2167
|
345
|
+
def test_recording_mode_should_handle_multiplicity_contraintstest_recording_mode_should_handle_multiplicity_contraints106,2405
|
346
|
+
def test_strict_record_mode_requires_exact_argument_matchestest_strict_record_mode_requires_exact_argument_matches118,2670
|
347
|
+
def test_strict_record_mode_requires_exact_orderingtest_strict_record_mode_requires_exact_ordering130,2948
|
348
|
+
def test_strict_record_mode_requires_oncetest_strict_record_mode_requires_once144,3251
|
349
|
+
def test_strict_record_mode_can_not_failtest_strict_record_mode_can_not_fail157,3524
|
350
|
+
|
351
|
+
test/test_samples.rb,142
|
352
|
+
class TestSamples < Test::Unit::TestCaseTestSamples17,378
|
353
|
+
def test_file_iotest_file_io25,748
|
354
|
+
def count_lines(file)count_lines33,999
|
355
|
+
|
356
|
+
test/test_should_receive.rb,6840
|
357
|
+
def mock_top_level_functionmock_top_level_function15,352
|
358
|
+
module KernelKernel20,394
|
359
|
+
def mock_kernel_functionmock_kernel_function21,408
|
360
|
+
class TestFlexMockShoulds < Test::Unit::TestCaseTestFlexMockShoulds26,455
|
361
|
+
def test_defaultstest_defaults35,871
|
362
|
+
def test_returns_with_valuetest_returns_with_value44,1039
|
363
|
+
def test_returns_with_multiple_valuestest_returns_with_multiple_values52,1208
|
364
|
+
def test_returns_with_blocktest_returns_with_block63,1468
|
365
|
+
def test_and_returns_aliastest_and_returns_alias72,1671
|
366
|
+
class MyError < RuntimeErrorMyError79,1808
|
367
|
+
def test_and_raises_with_exception_class_throws_exceptiontest_and_raises_with_exception_class_throws_exception82,1846
|
368
|
+
def test_and_raises_with_arguments_throws_exception_made_with_argstest_and_raises_with_arguments_throws_exception_made_with_args91,2055
|
369
|
+
def test_and_raises_with_a_specific_exception_throws_the_exceptiontest_and_raises_with_a_specific_exception_throws_the_exception101,2336
|
370
|
+
def test_raises_is_an_alias_for_and_raisetest_raises_is_an_alias_for_and_raise112,2606
|
371
|
+
def test_multiple_expectationstest_multiple_expectations121,2811
|
372
|
+
def test_with_no_args_with_no_argstest_with_no_args_with_no_args131,3048
|
373
|
+
def test__with_no_args_but_with_argstest__with_no_args_but_with_args138,3176
|
374
|
+
def test_with_any_argstest_with_any_args147,3376
|
375
|
+
def test_with_any_single_arg_matchingtest_with_any_single_arg_matching157,3554
|
376
|
+
def test_with_any_single_arg_nonmatchingtest_with_any_single_arg_nonmatching165,3747
|
377
|
+
def test_with_equal_arg_matchingtest_with_equal_arg_matching175,3982
|
378
|
+
def test_with_equal_arg_nonmatchingtest_with_equal_arg_nonmatching182,4145
|
379
|
+
def test_with_arbitrary_arg_matchingtest_with_arbitrary_arg_matching191,4382
|
380
|
+
def test_args_matching_with_regextest_args_matching_with_regex206,4802
|
381
|
+
def test_arg_matching_with_regex_matching_non_stringtest_arg_matching_with_regex_matching_non_string218,5129
|
382
|
+
def test_arg_matching_with_classtest_arg_matching_with_class225,5306
|
383
|
+
def test_arg_matching_with_no_matchtest_arg_matching_with_no_match236,5596
|
384
|
+
def test_arg_matching_with_string_doesnt_over_matchtest_arg_matching_with_string_doesnt_over_match245,5809
|
385
|
+
def test_block_arg_given_to_no_argstest_block_arg_given_to_no_args254,6028
|
386
|
+
def test_block_arg_given_to_matching_proctest_block_arg_given_to_matching_proc263,6232
|
387
|
+
def test_arg_matching_precedence_when_best_firsttest_arg_matching_precedence_when_best_first274,6517
|
388
|
+
def test_arg_matching_precedence_when_best_last_but_still_matches_firsttest_arg_matching_precedence_when_best_last_but_still_matches_first282,6726
|
389
|
+
def test_never_and_never_calledtest_never_and_never_called290,6958
|
390
|
+
def test_never_and_called_oncetest_never_and_called_once296,7073
|
391
|
+
def test_once_called_oncetest_once_called_once305,7269
|
392
|
+
def test_once_but_never_calledtest_once_but_never_called312,7403
|
393
|
+
def test_once_but_called_twicetest_once_but_called_twice320,7590
|
394
|
+
def test_twice_and_called_twicetest_twice_and_called_twice330,7809
|
395
|
+
def test_zero_or_more_called_zerotest_zero_or_more_called_zero338,7964
|
396
|
+
def test_zero_or_more_called_oncetest_zero_or_more_called_once344,8086
|
397
|
+
def test_zero_or_more_called_100test_zero_or_more_called_100351,8219
|
398
|
+
def test_timestest_times358,8365
|
399
|
+
def test_at_least_called_oncetest_at_least_called_once365,8506
|
400
|
+
def test_at_least_but_never_calledtest_at_least_but_never_called372,8653
|
401
|
+
def test_at_least_once_but_called_twicetest_at_least_once_but_called_twice380,8856
|
402
|
+
def test_at_least_and_exacttest_at_least_and_exact388,9027
|
403
|
+
def test_at_most_but_never_calledtest_at_most_but_never_called398,9257
|
404
|
+
def test_at_most_called_oncetest_at_most_called_once404,9393
|
405
|
+
def test_at_most_called_twicetest_at_most_called_twice411,9538
|
406
|
+
def test_at_most_and_at_least_called_nevertest_at_most_and_at_least_called_never421,9766
|
407
|
+
def test_at_most_and_at_least_called_oncetest_at_most_and_at_least_called_once429,9991
|
408
|
+
def test_at_most_and_at_least_called_twicetest_at_most_and_at_least_called_twice436,10164
|
409
|
+
def test_at_most_and_at_least_called_three_timestest_at_most_and_at_least_called_three_times444,10352
|
410
|
+
def test_call_counts_only_apply_to_matching_argstest_call_counts_only_apply_to_matching_args455,10630
|
411
|
+
def test_call_counts_only_apply_to_matching_args_with_mismatchtest_call_counts_only_apply_to_matching_args_with_mismatch467,10908
|
412
|
+
def test_ordered_calls_in_ordertest_ordered_calls_in_order483,11341
|
413
|
+
def test_ordered_calls_out_of_ordertest_ordered_calls_out_of_order493,11513
|
414
|
+
def test_order_calls_with_different_arg_lists_and_in_ordertest_order_calls_with_different_arg_lists_and_in_order505,11764
|
415
|
+
def test_order_calls_with_different_arg_lists_and_out_of_ordertest_order_calls_with_different_arg_lists_and_out_of_order515,12007
|
416
|
+
def test_unordered_calls_do_not_effect_ordered_testingtest_unordered_calls_do_not_effect_ordered_testing527,12323
|
417
|
+
def test_ordered_with_multiple_calls_is_oktest_ordered_with_multiple_calls_is_ok541,12593
|
418
|
+
def test_grouped_ordering_with_numberstest_grouped_ordering_with_numbers553,12804
|
419
|
+
def test_grouped_ordering_with_symbolstest_grouped_ordering_with_symbols568,13125
|
420
|
+
def test_explicit_ordering_mixed_with_implicit_ordering_should_not_overlaptest_explicit_ordering_mixed_with_implicit_ordering_should_not_overlap583,13487
|
421
|
+
def test_explicit_ordering_with_explicit_misorderstest_explicit_ordering_with_explicit_misorders593,13860
|
422
|
+
def test_ordering_with_explicit_no_args_matches_correctlytest_ordering_with_explicit_no_args_matches_correctly609,14391
|
423
|
+
def test_ordering_with_any_arg_matching_correctly_matchestest_ordering_with_any_arg_matching_correctly_matches621,14768
|
424
|
+
def test_expectation_formatingtest_expectation_formating632,15082
|
425
|
+
def test_multi_expectation_formattingtest_multi_expectation_formatting637,15266
|
426
|
+
def test_explicit_ordering_with_limits_allow_multiple_return_valuestest_explicit_ordering_with_limits_allow_multiple_return_values642,15409
|
427
|
+
def test_global_methods_can_be_mockedtest_global_methods_can_be_mocked661,16120
|
428
|
+
def test_kernel_methods_can_be_mockedtest_kernel_methods_can_be_mocked667,16308
|
429
|
+
def test_undefing_kernel_methods_dont_effect_other_mockstest_undefing_kernel_methods_dont_effect_other_mocks673,16490
|
430
|
+
def assert_failure(message=nil)assert_failure684,16920
|
431
|
+
class TestFlexMockShouldsWithInclude < Test::Unit::TestCaseTestFlexMockShouldsWithInclude698,17270
|
432
|
+
def test_include_enables_unqualified_arg_type_referencestest_include_enables_unqualified_arg_type_references700,17364
|
433
|
+
class TestFlexMockArgTypesDontLeak < Test::Unit::TestCaseTestFlexMockArgTypesDontLeak708,17528
|
434
|
+
def test_unqualified_arg_type_references_are_undefined_by_defaulttest_unqualified_arg_type_references_are_undefined_by_default709,17586
|
435
|
+
|
436
|
+
test/test_tu_integration.rb,1570
|
437
|
+
class TestTuIntegrationFlexMockMethod < Test::Unit::TestCaseTestTuIntegrationFlexMockMethod15,352
|
438
|
+
def test_can_construct_flexmocktest_can_construct_flexmock18,445
|
439
|
+
def test_can_construct_flexmock_with_blocktest_can_construct_flexmock_with_block24,594
|
440
|
+
class TestTuIntegrationMockVerificationInTeardown < Test::Unit::TestCaseTestTuIntegrationMockVerificationInTeardown32,770
|
441
|
+
def teardownteardown35,873
|
442
|
+
def test_mock_verification_occurs_during_teardowntest_mock_verification_occurs_during_teardown41,969
|
443
|
+
class TestTuIntegrationMockVerificationWithoutSetup < Test::Unit::TestCaseTestTuIntegrationMockVerificationWithoutSetup46,1087
|
444
|
+
def teardownteardown49,1192
|
445
|
+
def test_mock_verification_occurs_during_teardowntest_mock_verification_occurs_during_teardown55,1288
|
446
|
+
class TestTuIntegrationMockVerificationForgetfulSetup < Test::Unit::TestCaseTestTuIntegrationMockVerificationForgetfulSetup60,1406
|
447
|
+
def teardownteardown63,1513
|
448
|
+
def test_mock_verification_occurs_during_teardowntest_mock_verification_occurs_during_teardown69,1609
|
449
|
+
class TestTuIntegrationSetupOverridenAndNoMocksOk < Test::Unit::TestCaseTestTuIntegrationSetupOverridenAndNoMocksOk74,1727
|
450
|
+
def test_mock_verification_occurs_during_teardowntest_mock_verification_occurs_during_teardown77,1830
|
451
|
+
class TestTuIntegrationFailurePreventsVerification < Test::Unit::TestCaseTestTuIntegrationFailurePreventsVerification81,1893
|
452
|
+
def test_mock_verification_occurs_during_teardowntest_mock_verification_occurs_during_teardown84,1997
|
453
|
+
def simulate_failuresimulate_failure91,2131
|
454
|
+
|
455
|
+
test/rspec_integration/integration_spec.rb,0
|
456
|
+
|
457
|
+
test/test_unit_integration/test_auto_test_unit.rb,263
|
458
|
+
class TestFlexmockTestUnit < Test::Unit::TestCaseTestFlexmockTestUnit17,387
|
459
|
+
def teardownteardown18,437
|
460
|
+
def test_can_create_mockstest_can_create_mocks23,496
|
461
|
+
def test_should_fail__mocks_are_auto_verifiedtest_should_fail__mocks_are_auto_verified30,641
|
@@ -0,0 +1,111 @@
|
|
1
|
+
= FlexMock 0.6.2 Released
|
2
|
+
|
3
|
+
FlexMock is a flexible mocking library for use in unit testing and behavior
|
4
|
+
specification in Ruby. Version 0.6.2 introduces a two minor enhancements.
|
5
|
+
|
6
|
+
== New in 0.6.3
|
7
|
+
|
8
|
+
* Added the flexmodel() method for better support when mocking
|
9
|
+
ActiveRecord objects. flexmodel(YourModelClass) will return a pure
|
10
|
+
mock object that responds to some basic ActiveRecord methods with
|
11
|
+
reasonable defaults. The flexmodel() method is optional and you
|
12
|
+
need to require 'flexmock/activerecord' to active it.
|
13
|
+
|
14
|
+
* The flexmock() method now _always_ returns a combination domain
|
15
|
+
object / mock object. This means the object return can handle
|
16
|
+
domain methods and mock-specific methods (such as should_receive and
|
17
|
+
mock_teardown).
|
18
|
+
|
19
|
+
* A side effect of always returning a domain/mock object is that
|
20
|
+
partial mocks are now enhanced with about 5 or 6 extra methods.
|
21
|
+
Since partial mocks are real objects with just a few methods mocked,
|
22
|
+
there is a (small) potential for a method name conflict. FlexMock
|
23
|
+
now supports a safe-mode for partial mocks if this is an issue in
|
24
|
+
particular case (see the RDoc README file for more details).
|
25
|
+
|
26
|
+
* Fixed a small bug where attempting to mock a method that the partial
|
27
|
+
mock claims to respond to, but doesn't actually have defined would
|
28
|
+
cause an error. This tended to happen on active record objects
|
29
|
+
where attributes are dynamically handled.
|
30
|
+
|
31
|
+
== What is FlexMock?
|
32
|
+
|
33
|
+
FlexMock is a flexible framework for creating mock object for testing. When
|
34
|
+
running unit tests, it is often desirable to use isolate the objects being
|
35
|
+
tested from the "real world" by having them interact with simplified test
|
36
|
+
objects. Sometimes these test objects simply return values when called, other
|
37
|
+
times they verify that certain methods were called with particular arguments
|
38
|
+
in a particular order.
|
39
|
+
|
40
|
+
FlexMock makes creating these test objects easy.
|
41
|
+
|
42
|
+
=== Features
|
43
|
+
|
44
|
+
* Easy integration with both Test::Unit and RSpec. Mocks created with the
|
45
|
+
flexmock method are automatically verified at the end of the test or
|
46
|
+
example.
|
47
|
+
|
48
|
+
* A fluent interface that allows mock behavior to be specified very
|
49
|
+
easily.
|
50
|
+
|
51
|
+
* A "record mode" where an existing implementation can record its
|
52
|
+
interaction with a mock for later validation against a new
|
53
|
+
implementation.
|
54
|
+
|
55
|
+
* Easy mocking of individual methods in existing, non-mock objects.
|
56
|
+
|
57
|
+
* The ability to cause classes to instantiate test instances (instead of real
|
58
|
+
instances) for the duration of a test.
|
59
|
+
|
60
|
+
=== Example
|
61
|
+
|
62
|
+
Suppose you had a Dog object that wagged a tail when it was happy.
|
63
|
+
Something like this:
|
64
|
+
|
65
|
+
class Dog
|
66
|
+
def initialize(a_tail)
|
67
|
+
@tail = a_tail
|
68
|
+
end
|
69
|
+
def happy
|
70
|
+
@tail.wag
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
To test the +Dog+ class without a real +Tail+ object (perhaps because
|
75
|
+
real +Tail+ objects activate servos in some robotic equipment), you
|
76
|
+
can do something like this:
|
77
|
+
|
78
|
+
require 'test/unit'
|
79
|
+
require 'flexmock/test_unit'
|
80
|
+
|
81
|
+
class TestDog < Test::Unit::TestCase
|
82
|
+
def test_dog_wags_tail_when_happy
|
83
|
+
tail = flexmock("tail")
|
84
|
+
tail.should_receive(:wag).once
|
85
|
+
dog = Dog.new(tail)
|
86
|
+
dog.happy
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
FlexMock will automatically verify that the mocked tail object received the
|
91
|
+
message +wag+ exactly one time. If it doesn't, the test will not pass.
|
92
|
+
|
93
|
+
See the FlexMock documentation at http://flexmock.rubyforge.org for details on
|
94
|
+
specifying arguments and return values on mocked methods, as well as a simple
|
95
|
+
technique for mocking tail objects when the Dog class creates the tail objects
|
96
|
+
directly.
|
97
|
+
|
98
|
+
== Availability
|
99
|
+
|
100
|
+
You can make sure you have the latest version with a quick RubyGems command:
|
101
|
+
|
102
|
+
gem install flexmock (you may need root/admin privileges)
|
103
|
+
|
104
|
+
Otherwise, you can get it from the more traditional places:
|
105
|
+
|
106
|
+
Download:: http://rubyforge.org/project/showfiles.php?group_id=170
|
107
|
+
|
108
|
+
You will find documentation at: http://flexmock.rubyforge.org.
|
109
|
+
|
110
|
+
-- Jim Weirich
|
111
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'flexmock'
|
4
|
+
|
5
|
+
class FlexMock
|
6
|
+
module MockContainer
|
7
|
+
def MockContainer.next_id
|
8
|
+
@id_counter ||= 0
|
9
|
+
@id_counter += 1
|
10
|
+
end
|
11
|
+
|
12
|
+
def flexmodel(model_class, *args, &block)
|
13
|
+
id = MockContainer.next_id
|
14
|
+
mock = flexmock("#{model_class}_#{id}", *args, &block)
|
15
|
+
mock.should_receive(
|
16
|
+
:id => id,
|
17
|
+
:to_params => id.to_s,
|
18
|
+
:new_record? => false,
|
19
|
+
:errors => flexmock("errors", :count => 0),
|
20
|
+
:class => model_class)
|
21
|
+
mock.should_receive(:is_a?).with(any).and_return { |other|
|
22
|
+
other == model_class
|
23
|
+
}
|
24
|
+
mock
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/flexmock/core.rb
CHANGED
@@ -42,6 +42,11 @@ require 'flexmock/composite'
|
|
42
42
|
# call +super+.
|
43
43
|
#
|
44
44
|
class FlexMock
|
45
|
+
|
46
|
+
# Error raised when flexmock is used incorrectly.
|
47
|
+
class UsageError < RuntimeError
|
48
|
+
end
|
49
|
+
|
45
50
|
attr_reader :mock_name, :mock_groups
|
46
51
|
attr_accessor :mock_current_order, :mock_container
|
47
52
|
|
@@ -202,4 +207,4 @@ class FlexMock
|
|
202
207
|
end
|
203
208
|
end
|
204
209
|
|
205
|
-
require 'flexmock/core_class_methods'
|
210
|
+
require 'flexmock/core_class_methods'
|
@@ -113,10 +113,11 @@ class FlexMock
|
|
113
113
|
name = nil
|
114
114
|
quick_defs = {}
|
115
115
|
domain_obj = nil
|
116
|
+
safe_mode = false
|
116
117
|
while ! args.empty?
|
117
118
|
case args.first
|
118
|
-
when :base
|
119
|
-
args.shift
|
119
|
+
when :base, :safe
|
120
|
+
safe_mode = (args.shift == :safe)
|
120
121
|
domain_obj = args.shift
|
121
122
|
when String, Symbol
|
122
123
|
name = args.shift.to_s
|
@@ -126,8 +127,10 @@ class FlexMock
|
|
126
127
|
domain_obj = args.shift
|
127
128
|
end
|
128
129
|
end
|
130
|
+
raise UsageError, "a block is required in safe mode" if safe_mode && ! block_given?
|
131
|
+
|
129
132
|
if domain_obj
|
130
|
-
mock = flexmock_make_partial_proxy(domain_obj, name)
|
133
|
+
mock = flexmock_make_partial_proxy(domain_obj, name, safe_mode)
|
131
134
|
else
|
132
135
|
mock = FlexMock.new(name || "unknown")
|
133
136
|
domain_obj = mock
|
@@ -136,17 +139,18 @@ class FlexMock
|
|
136
139
|
yield(mock) if block_given?
|
137
140
|
flexmock_remember(mock)
|
138
141
|
block_given? ? domain_obj : mock
|
142
|
+
domain_obj
|
139
143
|
end
|
140
144
|
alias flexstub flexmock
|
141
145
|
|
142
146
|
private
|
143
147
|
|
144
|
-
# Create a
|
145
|
-
# of the mock object.
|
146
|
-
def flexmock_make_partial_proxy(obj, name)
|
148
|
+
# Create a PartialMockProxy for the given object. Use +name+ as
|
149
|
+
# the name of the mock object.
|
150
|
+
def flexmock_make_partial_proxy(obj, name, safe_mode)
|
147
151
|
name ||= "flexmock(#{obj.class.to_s})"
|
148
152
|
obj.instance_eval {
|
149
|
-
@flexmock_proxy ||=
|
153
|
+
@flexmock_proxy ||= PartialMockProxy.new(obj, FlexMock.new(name), safe_mode)
|
150
154
|
}
|
151
155
|
obj.instance_variable_get("@flexmock_proxy")
|
152
156
|
end
|
@@ -14,20 +14,29 @@ require 'flexmock/noop'
|
|
14
14
|
class FlexMock
|
15
15
|
|
16
16
|
# #########################################################################
|
17
|
-
#
|
18
|
-
# object is "enhanced" with a reference to a mock
|
19
|
-
# <tt>@flexmock_mock</tt>). When the
|
20
|
-
# proxy, it overrides the
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
17
|
+
# PartialMockProxy is used to mate the mock framework to an existing
|
18
|
+
# object. The object is "enhanced" with a reference to a mock
|
19
|
+
# object (stored in <tt>@flexmock_mock</tt>). When the
|
20
|
+
# +should_receive+ method is sent to the proxy, it overrides the
|
21
|
+
# existing object's method by creating singleton method that
|
22
|
+
# forwards to the mock. When testing is complete, PartialMockProxy
|
23
|
+
# will erase the mocking infrastructure from the object being mocked
|
24
|
+
# (e.g. remove instance variables and mock singleton methods).
|
24
25
|
#
|
25
|
-
class
|
26
|
+
class PartialMockProxy
|
26
27
|
attr_reader :mock, :mock_groups
|
27
28
|
attr_accessor :mock_current_order, :mock_container
|
28
29
|
|
29
|
-
#
|
30
|
-
|
30
|
+
# The following methods are added to partial mocks so that they
|
31
|
+
# can act like a mock.
|
32
|
+
|
33
|
+
MOCK_METHODS = [
|
34
|
+
:should_receive, :new_instances, :any_instance,
|
35
|
+
:mock, :mock_teardown, :mock_verify
|
36
|
+
]
|
37
|
+
|
38
|
+
# Initialize a PartialMockProxy object.
|
39
|
+
def initialize(obj, mock, safe_mode)
|
31
40
|
@obj = obj
|
32
41
|
@mock = mock
|
33
42
|
@method_definitions = {}
|
@@ -35,6 +44,11 @@ class FlexMock
|
|
35
44
|
@allocated_order = 0
|
36
45
|
@mock_current_order = 0
|
37
46
|
@mock_groups = {}
|
47
|
+
unless safe_mode
|
48
|
+
MOCK_METHODS.each do |sym|
|
49
|
+
add_mock_method(@obj, sym)
|
50
|
+
end
|
51
|
+
end
|
38
52
|
end
|
39
53
|
|
40
54
|
# :call-seq:
|
@@ -61,7 +75,6 @@ class FlexMock
|
|
61
75
|
FlexMock.should_receive(args) do |sym|
|
62
76
|
unless @methods_proxied.include?(sym)
|
63
77
|
hide_existing_method(sym)
|
64
|
-
@methods_proxied << sym
|
65
78
|
end
|
66
79
|
ex = @mock.should_receive(sym)
|
67
80
|
ex.mock = self
|
@@ -69,6 +82,15 @@ class FlexMock
|
|
69
82
|
end
|
70
83
|
end
|
71
84
|
|
85
|
+
def add_mock_method(obj, method_name)
|
86
|
+
stow_existing_definition(method_name)
|
87
|
+
eval %{
|
88
|
+
def obj.#{method_name}(*args, &block)
|
89
|
+
@flexmock_proxy.#{method_name}(*args, &block)
|
90
|
+
end
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
72
94
|
# :call-seq:
|
73
95
|
# new_instances.should_receive(...)
|
74
96
|
# new_instances { |instance| instance.should_receive(...) }
|
@@ -146,7 +168,7 @@ class FlexMock
|
|
146
168
|
class << @obj; self; end
|
147
169
|
end
|
148
170
|
|
149
|
-
# Is the
|
171
|
+
# Is the given method name a singleton method in the object we are
|
150
172
|
# mocking?
|
151
173
|
def singleton?(method_name)
|
152
174
|
@obj.methods(false).include?(method_name.to_s)
|
@@ -159,13 +181,16 @@ class FlexMock
|
|
159
181
|
# not a singleton, all we need to do is override it with our own
|
160
182
|
# singleton.
|
161
183
|
def hide_existing_method(method_name)
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
184
|
+
stow_existing_definition(method_name)
|
185
|
+
define_proxy_method(method_name)
|
186
|
+
end
|
187
|
+
|
188
|
+
# Stow the existing method definition so that it can be recovered
|
189
|
+
# later.
|
190
|
+
def stow_existing_definition(method_name)
|
191
|
+
@methods_proxied << method_name
|
192
|
+
new_alias = create_alias_for_existing_method(method_name)
|
193
|
+
if new_alias
|
169
194
|
my_object = @obj
|
170
195
|
@method_definitions[method_name] = Proc.new { |*args|
|
171
196
|
block = nil
|
@@ -177,7 +202,24 @@ class FlexMock
|
|
177
202
|
}
|
178
203
|
end
|
179
204
|
remove_current_method(method_name) if singleton?(method_name)
|
180
|
-
|
205
|
+
end
|
206
|
+
|
207
|
+
# Create an alias for the existing +method_name+. Returns the new
|
208
|
+
# alias name. If the aliasing process fails (because the method
|
209
|
+
# doesn't really exist, then return nil.
|
210
|
+
def create_alias_for_existing_method(method_name)
|
211
|
+
begin
|
212
|
+
new_alias = new_name(method_name)
|
213
|
+
unless @obj.respond_to?(new_alias)
|
214
|
+
sclass.class_eval do
|
215
|
+
alias_method(new_alias, method_name)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
new_alias
|
219
|
+
rescue NameError => ex
|
220
|
+
# Alias attempt failed
|
221
|
+
nil
|
222
|
+
end
|
181
223
|
end
|
182
224
|
|
183
225
|
# Define a proxy method that forwards to our mock object. The
|
@@ -185,17 +227,20 @@ class FlexMock
|
|
185
227
|
# being mocked.
|
186
228
|
def define_proxy_method(method_name)
|
187
229
|
if method_name.to_s =~ /=$/
|
230
|
+
eval_line = __LINE__ + 1
|
188
231
|
sclass.class_eval %{
|
189
232
|
def #{method_name}(*args, &block)
|
190
233
|
@flexmock_proxy.mock.__send__(:#{method_name}, *args, &block)
|
191
234
|
end
|
192
|
-
}
|
235
|
+
}, __FILE__, eval_line
|
193
236
|
else
|
237
|
+
eval_line = __LINE__ + 1
|
194
238
|
sclass.class_eval %{
|
195
239
|
def #{method_name}(*args, &block)
|
196
240
|
@flexmock_proxy.mock.#{method_name}(*args, &block)
|
197
241
|
end
|
198
|
-
}
|
242
|
+
}, __FILE__, eval_line
|
243
|
+
make_rcov_recognize_the_above_eval_is_covered = true
|
199
244
|
end
|
200
245
|
end
|
201
246
|
|
@@ -102,7 +102,7 @@ class TestFlexmockContainerMethods < Test::Unit::TestCase
|
|
102
102
|
assert_equal 2, s.length
|
103
103
|
end
|
104
104
|
|
105
|
-
def
|
105
|
+
def test_multiple_stubs_work_with_same_partial_mock_proxy
|
106
106
|
obj = Object.new
|
107
107
|
mock1 = flexmock(obj)
|
108
108
|
mock2 = flexmock(obj)
|
@@ -116,4 +116,4 @@ class TestFlexmockContainerMethods < Test::Unit::TestCase
|
|
116
116
|
assert_equal :lo, obj.hi
|
117
117
|
assert_equal :low, obj.high
|
118
118
|
end
|
119
|
-
end
|
119
|
+
end
|
@@ -58,7 +58,7 @@ class TestExtendedShouldReceiveOnFullMocks < Test::Unit::TestCase
|
|
58
58
|
|
59
59
|
end
|
60
60
|
|
61
|
-
class
|
61
|
+
class TestExtendedShouldReceiveOnPartialMockProxies < Test::Unit::TestCase
|
62
62
|
include FlexMock::TestCase
|
63
63
|
include ExtendedShouldReceiveTests
|
64
64
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'flexmock/activerecord'
|
5
|
+
|
6
|
+
class DummyModel
|
7
|
+
end
|
8
|
+
|
9
|
+
######################################################################
|
10
|
+
class TestFlexModel < Test::Unit::TestCase
|
11
|
+
include FlexMock::TestCase
|
12
|
+
|
13
|
+
def test_initial_conditions
|
14
|
+
model = flexmodel(DummyModel)
|
15
|
+
assert_match(/^DummyModel_\d+/, model.mock_name)
|
16
|
+
assert_equal model.id.to_s, model.to_params
|
17
|
+
assert ! model.new_record?
|
18
|
+
assert model.is_a?(DummyModel)
|
19
|
+
assert_equal DummyModel, model.class
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_mock_models_have_different_ids
|
23
|
+
m1 = flexmodel(DummyModel)
|
24
|
+
m2 = flexmodel(DummyModel)
|
25
|
+
assert m2.id != m1.id
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_mock_models_can_have_quick_defs
|
29
|
+
model = flexmodel(DummyModel, :xyzzy => :ok)
|
30
|
+
assert_equal :ok, model.xyzzy
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_mock_models_can_have_blocks
|
34
|
+
model = flexmodel(DummyModel) do |m|
|
35
|
+
m.should_receive(:xyzzy => :okdokay)
|
36
|
+
end
|
37
|
+
assert_equal :okdokay, model.xyzzy
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
data/test/test_partial_mock.rb
CHANGED
@@ -214,5 +214,101 @@ class TestStubbing < Test::Unit::TestCase
|
|
214
214
|
end
|
215
215
|
assert_equal :growl, dog.bark
|
216
216
|
end
|
217
|
+
|
218
|
+
def test_partial_mocks_always_return_domain_object
|
219
|
+
dog = Dog.new
|
220
|
+
assert_equal dog, flexmock(dog)
|
221
|
+
assert_equal dog, flexmock(dog) { }
|
222
|
+
end
|
223
|
+
|
224
|
+
MOCK_METHOD_SUBSET = [
|
225
|
+
:should_receive, :new_instances,
|
226
|
+
:mock, :mock_teardown, :mock_verify,
|
227
|
+
]
|
228
|
+
|
229
|
+
def test_domain_objects_do_not_have_mock_methods
|
230
|
+
dog = Dog.new
|
231
|
+
MOCK_METHOD_SUBSET.each do |sym|
|
232
|
+
assert ! dog.respond_to?(sym), "should not have :#{sym} defined"
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_partial_mocks_have_mock_methods
|
237
|
+
dog = Dog.new
|
238
|
+
flexmock(dog)
|
239
|
+
MOCK_METHOD_SUBSET.each do |sym|
|
240
|
+
assert dog.respond_to?(sym), "should have :#{sym} defined"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_partial_mocks_do_not_have_mock_methods_after_teardown
|
245
|
+
dog = Dog.new
|
246
|
+
flexmock(dog)
|
247
|
+
dog.mock_teardown
|
248
|
+
MOCK_METHOD_SUBSET.each do |sym|
|
249
|
+
assert ! dog.respond_to?(sym), "should not have :#{sym} defined"
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_partial_mocks_with_mock_method_singleton_colision_have_original_defs_restored
|
254
|
+
dog = Dog.new
|
255
|
+
def dog.mock() :original end
|
256
|
+
flexmock(dog)
|
257
|
+
dog.mock_teardown
|
258
|
+
assert_equal :original, dog.mock
|
259
|
+
end
|
260
|
+
|
261
|
+
class MockColision
|
262
|
+
def mock
|
263
|
+
:original
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def test_partial_mocks_with_mock_method_non_singleton_colision_have_original_defs_restored
|
268
|
+
mc = MockColision.new
|
269
|
+
flexmock(mc)
|
270
|
+
mc.mock_teardown
|
271
|
+
assert_equal :original, mc.mock
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_safe_partial_mocks_do_not_support_mock_methods
|
275
|
+
dog = Dog.new
|
276
|
+
flexmock(:safe, dog) { }
|
277
|
+
MOCK_METHOD_SUBSET.each do |sym|
|
278
|
+
assert ! dog.respond_to?(sym), "should not have :#{sym} defined"
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_safe_partial_mocks_require_block
|
283
|
+
dog = Dog.new
|
284
|
+
ex = assert_raise(FlexMock::UsageError) { flexmock(:safe, dog) }
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_safe_partial_mocks_are_actually_mocked
|
288
|
+
dog = flexmock(:safe, Dog.new) { |m| m.should_receive(:bark => :mocked) }
|
289
|
+
assert_equal :mocked, dog.bark
|
290
|
+
end
|
291
|
+
|
292
|
+
class Liar
|
293
|
+
def respond_to?(method_name)
|
294
|
+
sym = method_name.to_sym
|
295
|
+
if sym == :not_defined
|
296
|
+
true
|
297
|
+
else
|
298
|
+
super(method_name)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
def test_liar_actually_lies
|
304
|
+
liar = Liar.new
|
305
|
+
assert liar.respond_to?(:not_defined)
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_partial_mock_where_respond_to_is_true_yet_method_is_not_there
|
309
|
+
liar = Liar.new
|
310
|
+
flexmock(liar, :not_defined => :xyzzy)
|
311
|
+
assert_equal :xyzzy, liar.not_defined
|
312
|
+
end
|
217
313
|
|
218
314
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4.1
|
|
3
3
|
specification_version: 1
|
4
4
|
name: flexmock
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.6.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.6.3
|
7
|
+
date: 2007-08-16 00:00:00 -04:00
|
8
8
|
summary: Simple and Flexible Mock Objects for Testing
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,10 +29,12 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- Jim Weirich
|
31
31
|
files:
|
32
|
-
-
|
32
|
+
- CHANGES
|
33
33
|
- Rakefile
|
34
34
|
- README
|
35
|
+
- TAGS
|
35
36
|
- lib/flexmock.rb
|
37
|
+
- lib/flexmock/activerecord.rb
|
36
38
|
- lib/flexmock/argument_matchers.rb
|
37
39
|
- lib/flexmock/argument_types.rb
|
38
40
|
- lib/flexmock/base.rb
|
@@ -54,6 +56,7 @@ files:
|
|
54
56
|
- test/test_default_framework_adapter.rb
|
55
57
|
- test/test_example.rb
|
56
58
|
- test/test_extended_should_receive.rb
|
59
|
+
- test/test_flexmodel.rb
|
57
60
|
- test/test_mock.rb
|
58
61
|
- test/test_naming.rb
|
59
62
|
- test/test_new_instances.rb
|
@@ -76,6 +79,7 @@ files:
|
|
76
79
|
- doc/releases/flexmock-0.6.0.rdoc
|
77
80
|
- doc/releases/flexmock-0.6.1.rdoc
|
78
81
|
- doc/releases/flexmock-0.6.2.rdoc
|
82
|
+
- doc/releases/flexmock-0.6.3.rdoc
|
79
83
|
test_files: []
|
80
84
|
|
81
85
|
rdoc_options:
|
@@ -86,7 +90,7 @@ rdoc_options:
|
|
86
90
|
- --line-numbers
|
87
91
|
extra_rdoc_files:
|
88
92
|
- README
|
89
|
-
-
|
93
|
+
- CHANGES
|
90
94
|
- doc/GoogleExample.rdoc
|
91
95
|
- doc/releases/flexmock-0.4.0.rdoc
|
92
96
|
- doc/releases/flexmock-0.4.1.rdoc
|
@@ -97,6 +101,7 @@ extra_rdoc_files:
|
|
97
101
|
- doc/releases/flexmock-0.6.0.rdoc
|
98
102
|
- doc/releases/flexmock-0.6.1.rdoc
|
99
103
|
- doc/releases/flexmock-0.6.2.rdoc
|
104
|
+
- doc/releases/flexmock-0.6.3.rdoc
|
100
105
|
executables: []
|
101
106
|
|
102
107
|
extensions: []
|