flexmock 1.3.3 → 2.0.0.rc1
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.
- checksums.yaml +4 -4
- data/.autotest +3 -0
- data/.gitignore +14 -0
- data/.togglerc +7 -0
- data/.travis.yml +5 -0
- data/.yardopts +2 -0
- data/CHANGES +11 -0
- data/Gemfile +1 -4
- data/README.md +39 -11
- data/Rakefile +6 -217
- data/doc/examples/rspec_examples_spec.rb +244 -0
- data/doc/examples/test_unit_examples_test.rb +240 -0
- data/doc/jamis.rb +591 -0
- data/flexmock.gemspec +33 -0
- data/lib/flexmock.rb +0 -1
- data/lib/flexmock/composite_expectation.rb +1 -1
- data/lib/flexmock/core.rb +3 -7
- data/lib/flexmock/core_class_methods.rb +5 -1
- data/lib/flexmock/default_framework_adapter.rb +2 -2
- data/lib/flexmock/expectation.rb +29 -3
- data/lib/flexmock/expectation_director.rb +1 -1
- data/lib/flexmock/minitest.rb +13 -0
- data/lib/flexmock/minitest_extensions.rb +26 -0
- data/lib/flexmock/minitest_integration.rb +111 -0
- data/lib/flexmock/mock_container.rb +1 -2
- data/lib/flexmock/partial_mock.rb +61 -104
- data/lib/flexmock/recorder.rb +1 -2
- data/lib/flexmock/rspec.rb +6 -3
- data/lib/flexmock/test_unit_integration.rb +14 -0
- data/lib/flexmock/validators.rb +5 -4
- data/lib/flexmock/version.rb +1 -9
- data/rakelib/metrics.rake +40 -0
- data/rakelib/preview.rake +4 -0
- data/rakelib/tags.rake +18 -0
- data/todo.txt +20 -0
- metadata +61 -86
- data/Gemfile.lock +0 -20
- data/doc/examples/rspec_examples_spec.rdoc +0 -245
- data/doc/examples/test_unit_examples_test.rdoc +0 -241
- data/test/aliasing_test.rb +0 -66
- data/test/assert_spy_called_test.rb +0 -119
- data/test/base_class_test.rb +0 -71
- data/test/based_partials_test.rb +0 -51
- data/test/container_methods_test.rb +0 -118
- data/test/default_framework_adapter_test.rb +0 -38
- data/test/demeter_mocking_test.rb +0 -191
- data/test/deprecated_methods_test.rb +0 -225
- data/test/examples_from_readme_test.rb +0 -157
- data/test/expectation_description_test.rb +0 -80
- data/test/extended_should_receive_test.rb +0 -69
- data/test/flexmodel_test.rb +0 -54
- data/test/mock_builder_test.rb +0 -68
- data/test/naming_test.rb +0 -84
- data/test/new_instances_test.rb +0 -215
- data/test/object_extensions_test.rb +0 -25
- data/test/partial_mock_test.rb +0 -458
- data/test/record_mode_test.rb +0 -158
- data/test/redirect_error.rb +0 -16
- data/test/rspec_integration/integration_spec.rb +0 -56
- data/test/rspec_integration/spy_example_spec.rb +0 -207
- data/test/samples_test.rb +0 -283
- data/test/should_ignore_missing_test.rb +0 -84
- data/test/should_receive_test.rb +0 -1155
- data/test/spys_test.rb +0 -215
- data/test/symbol_extensions_test.rb +0 -8
- data/test/test_class_extensions.rb +0 -34
- data/test/test_setup.rb +0 -92
- data/test/test_unit_integration/auto_test_unit_test.rb +0 -42
- data/test/test_unit_integration/minitest_teardown_test.rb +0 -14
- data/test/tu_integration_test.rb +0 -99
- data/test/undefined_test.rb +0 -87
@@ -1,241 +0,0 @@
|
|
1
|
-
= FlexMock Examples
|
2
|
-
require 'flexmock/test_unit'
|
3
|
-
|
4
|
-
class TestSimple < Test::Unit::TestCase
|
5
|
-
|
6
|
-
# Simple stubbing of some methods
|
7
|
-
|
8
|
-
def test_simple_mock
|
9
|
-
m = flexmock(:pi => 3.1416, :e => 2.71)
|
10
|
-
assert_equal 3.1416, m.pi
|
11
|
-
assert_equal 2.71, m.e
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
class TestUndefined < Test::Unit::TestCase
|
17
|
-
|
18
|
-
# Create a mock object that returns an undefined object for method calls
|
19
|
-
|
20
|
-
def test_undefined_values
|
21
|
-
m = flexmock("mock")
|
22
|
-
m.should_receive(:divide_by).with(0).
|
23
|
-
and_return_undefined
|
24
|
-
assert_equal FlexMock.undefined, m.divide_by(0)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class TestDb < Test::Unit::TestCase
|
29
|
-
|
30
|
-
# Expect multiple queries and a single update
|
31
|
-
|
32
|
-
# Multiple calls to the query method will be allows, and calls may
|
33
|
-
# have any argument list. Each call to query will return the three
|
34
|
-
# element array [1, 2, 3]. The call to update must have a specific
|
35
|
-
# argument of 5.
|
36
|
-
|
37
|
-
def test_db
|
38
|
-
db = flexmock('db')
|
39
|
-
db.should_receive(:query).and_return([1,2,3])
|
40
|
-
db.should_receive(:update).with(5).and_return(nil).once
|
41
|
-
|
42
|
-
# Test Code
|
43
|
-
|
44
|
-
db.query
|
45
|
-
db.update(5)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
class TestOrdered < Test::Unit::TestCase
|
50
|
-
|
51
|
-
# Expect all queries before any updates
|
52
|
-
|
53
|
-
# All the query message must occur before any of the update
|
54
|
-
# messages.
|
55
|
-
|
56
|
-
def test_query_and_update
|
57
|
-
db = flexmock('db')
|
58
|
-
db.should_receive(:query).and_return([1,2,3]).ordered
|
59
|
-
db.should_receive(:update).and_return(nil).ordered
|
60
|
-
|
61
|
-
# test code here
|
62
|
-
|
63
|
-
db.query
|
64
|
-
db.update
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
class MoreOrdered < Test::Unit::TestCase
|
69
|
-
|
70
|
-
# Expect several queries with different parameters
|
71
|
-
|
72
|
-
# The queries should happen after startup but before finish. The
|
73
|
-
# queries themselves may happen in any order (because they are in
|
74
|
-
# the same order group). The first two queries should happen exactly
|
75
|
-
# once, but the third query (which matches any query call with a
|
76
|
-
# four character parameter) may be called multiple times (but at
|
77
|
-
# least once). Startup and finish must also happen exactly once.
|
78
|
-
|
79
|
-
# Also note that we use the <code>with</code> method to match
|
80
|
-
# different argument values to figure out what value to return.
|
81
|
-
|
82
|
-
def test_ordered_queries
|
83
|
-
db = flexmock('db')
|
84
|
-
db.should_receive(:startup).once.ordered
|
85
|
-
db.should_receive(:query).with("CPWR").and_return(12.3).
|
86
|
-
once.ordered(:queries)
|
87
|
-
db.should_receive(:query).with("MSFT").and_return(10.0).
|
88
|
-
once.ordered(:queries)
|
89
|
-
db.should_receive(:query).with(/^....$/).and_return(3.3).
|
90
|
-
at_least.once.ordered(:queries)
|
91
|
-
db.should_receive(:finish).once.ordered
|
92
|
-
|
93
|
-
# Test Code
|
94
|
-
|
95
|
-
db.startup
|
96
|
-
db.query("MSFT")
|
97
|
-
db.query("XYZY")
|
98
|
-
db.query("CPWR")
|
99
|
-
db.finish
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
class EvenMoreOrderedTest < Test::Unit::TestCase
|
104
|
-
|
105
|
-
# Same as above, but using the Record Mode interface
|
106
|
-
|
107
|
-
# The record mode interface offers much the same features as the
|
108
|
-
# <code>should_receive</code> interface introduced so far, but it
|
109
|
-
# allows the messages to be sent directly to a recording object
|
110
|
-
# rather than be specified indirectly using a symbol.
|
111
|
-
|
112
|
-
|
113
|
-
def test_ordered_queries_in_record_mode
|
114
|
-
db = flexmock('db')
|
115
|
-
db.should_expect do |rec|
|
116
|
-
rec.startup.once.ordered
|
117
|
-
rec.query("CPWR") { 12.3 }.once.ordered(:queries)
|
118
|
-
rec.query("MSFT") { 10.0 }.once.ordered(:queries)
|
119
|
-
rec.query(/^....$/) { 3.3 }.at_least.once.ordered(:queries)
|
120
|
-
rec.finish.once.ordered
|
121
|
-
end
|
122
|
-
|
123
|
-
# Test Code
|
124
|
-
|
125
|
-
db.startup
|
126
|
-
db.query("MSFT")
|
127
|
-
db.query("XYZY")
|
128
|
-
db.query("CPWR")
|
129
|
-
db.finish
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
class RecordedTest < Test::Unit::TestCase
|
134
|
-
|
135
|
-
# Using Record Mode to record a known, good algorithm for testing
|
136
|
-
|
137
|
-
# Record mode is nice when you have a known, good algorithm that can
|
138
|
-
# use a recording mock object to record the steps. Then you compare
|
139
|
-
# the execution of a new algorithm to behavior of the old using the
|
140
|
-
# recorded expectations in the mock. For this you probably want to
|
141
|
-
# put the recorder in _strict_ mode so that the recorded
|
142
|
-
# expectations use exact matching on argument lists, and strict
|
143
|
-
# ordering of the method calls.
|
144
|
-
|
145
|
-
# <b>Note:</b> This is most useful when there are no queries on the
|
146
|
-
# mock objects, because the query responses cannot be programmed
|
147
|
-
# into the recorder object.
|
148
|
-
|
149
|
-
def test_build_xml
|
150
|
-
builder = flexmock('builder')
|
151
|
-
builder.should_expect do |rec|
|
152
|
-
rec.should_be_strict
|
153
|
-
known_good_way_to_build_xml(rec) # record the messages
|
154
|
-
end
|
155
|
-
new_way_to_build_xml(builder) # compare to new way
|
156
|
-
end
|
157
|
-
|
158
|
-
def known_good_way_to_build_xml(builder)
|
159
|
-
builder.person
|
160
|
-
end
|
161
|
-
|
162
|
-
def new_way_to_build_xml(builder)
|
163
|
-
builder.person
|
164
|
-
end
|
165
|
-
|
166
|
-
end
|
167
|
-
|
168
|
-
class MultipleReturnValueTest < Test::Unit::TestCase
|
169
|
-
|
170
|
-
# Expect multiple calls, returning a different value each time
|
171
|
-
|
172
|
-
# Sometimes you need to return different values for each call to a
|
173
|
-
# mocked method. This example shifts values out of a list for this
|
174
|
-
# effect.
|
175
|
-
|
176
|
-
def test_multiple_gets
|
177
|
-
file = flexmock('file')
|
178
|
-
file.should_receive(:gets).with_no_args.
|
179
|
-
and_return("line 1\n", "line 2\n")
|
180
|
-
|
181
|
-
# test code here
|
182
|
-
|
183
|
-
file.gets # returns "line 1"
|
184
|
-
file.gets # returns "line 2"
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
class IgnoreUnimportantMessages < Test::Unit::TestCase
|
189
|
-
|
190
|
-
# Ignore uninteresting messages
|
191
|
-
|
192
|
-
# Generally you need to mock only those methods that return an
|
193
|
-
# interesting value or wish to assert were sent in a particular
|
194
|
-
# manner. Use the <code>should_ignore_missing</code> method to turn
|
195
|
-
# on missing method ignoring.
|
196
|
-
|
197
|
-
def test_an_important_message
|
198
|
-
m = flexmock('m')
|
199
|
-
m.should_receive(:an_important_message).and_return(1).once
|
200
|
-
m.should_ignore_missing
|
201
|
-
|
202
|
-
# Test Code
|
203
|
-
|
204
|
-
m.an_important_message
|
205
|
-
m.an_unimportant_message
|
206
|
-
end
|
207
|
-
|
208
|
-
# When <code>should_ignore_missing</code> is enabled, ignored
|
209
|
-
# missing methods will return an undefined object. Any operation on
|
210
|
-
# the undefined object will return the undefined object.
|
211
|
-
|
212
|
-
end
|
213
|
-
|
214
|
-
class PartialMockTest < Test::Unit::TestCase
|
215
|
-
|
216
|
-
# Mock just one method on an existing object
|
217
|
-
|
218
|
-
# The Portfolio class calculate the value of a set of stocks by
|
219
|
-
# talking to a quote service via a web service. Since we don't want
|
220
|
-
# to use a real web service in our unit tests, we will mock the
|
221
|
-
# quote service.
|
222
|
-
|
223
|
-
def test_portfolio_value
|
224
|
-
flexmock(QuoteService).new_instances do |m|
|
225
|
-
m.should_receive(:quote).and_return(100)
|
226
|
-
end
|
227
|
-
port = Portfolio.new
|
228
|
-
value = port.value # Portfolio calls QuoteService.quote
|
229
|
-
assert_equal 100, value
|
230
|
-
end
|
231
|
-
|
232
|
-
class QuoteService
|
233
|
-
end
|
234
|
-
|
235
|
-
class Portfolio
|
236
|
-
def value
|
237
|
-
qs = QuoteService.new
|
238
|
-
qs.quote
|
239
|
-
end
|
240
|
-
end
|
241
|
-
end
|
data/test/aliasing_test.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/test_setup'
|
4
|
-
|
5
|
-
# This is an experimental test to see if mock and stub methods can
|
6
|
-
# easily be added to a flexmock core. These test are disabled by
|
7
|
-
# default, and should be reviewed before something more production
|
8
|
-
# oriented is provided.
|
9
|
-
|
10
|
-
if ENV['TEST_ALIASES']
|
11
|
-
|
12
|
-
class FlexMock
|
13
|
-
module StubsAndExpects
|
14
|
-
def expects(*args)
|
15
|
-
result = should_receive(*args)
|
16
|
-
result.at_least.once unless result.call_count_constrained?
|
17
|
-
result
|
18
|
-
end
|
19
|
-
def stubs(*args)
|
20
|
-
should_receive(*args)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
module MockContainer
|
25
|
-
alias :mock :flexmock
|
26
|
-
alias :stub :flexmock
|
27
|
-
end
|
28
|
-
|
29
|
-
include StubsAndExpects
|
30
|
-
|
31
|
-
class PartialMockProxy
|
32
|
-
include StubsAndExpects
|
33
|
-
MOCK_METHODS << :stubs << :expects
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class AliasingTest < Test::Unit::TestCase
|
38
|
-
include FlexMock::TestCase
|
39
|
-
|
40
|
-
def test_mocking
|
41
|
-
m = mock("a cute dog").expects(:pat).twice.and_return(:woof!).mock
|
42
|
-
assert_equal :woof!, m.pat
|
43
|
-
assert_equal :woof!, m.pat
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_once_mocking
|
47
|
-
mock("a cute dog").expects(:pat).and_return(:woof!).mock
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_twice_mocking
|
51
|
-
m = mock("a cute dog").expects(:pat).and_return(:woof!).twice.mock
|
52
|
-
assert_raises(assertion_failed_error) { m.flexmock_verify }
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_stubbing
|
56
|
-
m = stub("a cute dog").expects(:pat).and_return(:woof!).mock
|
57
|
-
assert_equal :woof!, m.pat
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_partial
|
61
|
-
obj = Object.new
|
62
|
-
stub(obj).stubs(:wag).and_return(:tail)
|
63
|
-
assert_equal :tail, obj.wag
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,119 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/test_setup'
|
4
|
-
require 'flexmock/test_unit_assert_spy_called'
|
5
|
-
|
6
|
-
class AssertSpyCalledTest < Test::Unit::TestCase
|
7
|
-
include FlexMock::TestCase
|
8
|
-
|
9
|
-
class FooBar
|
10
|
-
def foo
|
11
|
-
end
|
12
|
-
def bar
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def setup
|
17
|
-
super
|
18
|
-
@spy = flexmock(:on, FooBar)
|
19
|
-
end
|
20
|
-
|
21
|
-
def spy
|
22
|
-
@spy
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_assert_detects_basic_call
|
26
|
-
spy.foo
|
27
|
-
assert_spy_called spy, :foo
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_assert_detects_basic_call_with_args
|
31
|
-
spy.foo(1,2)
|
32
|
-
assert_spy_called spy, :foo, 1, 2
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_assert_rejects_incorrect_args
|
36
|
-
spy.foo(1,2)
|
37
|
-
assert_fails(/^expected foo\(1, 3\) to be received by <FlexMock:AssertSpyCalledTest::FooBar Mock>/i) do
|
38
|
-
assert_spy_called spy, :foo, 1, 3
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_assert_detects_multiple_calls
|
43
|
-
spy.foo
|
44
|
-
spy.foo
|
45
|
-
spy.foo
|
46
|
-
assert_spy_called spy, {:times => 3}, :foo
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_assert_rejects_incorrect_type
|
50
|
-
spy.foo
|
51
|
-
spy.foo
|
52
|
-
assert_fails(/^expected foo\(\) to be received by <FlexMock:AssertSpyCalledTest::FooBar Mock> 3 times/i) do
|
53
|
-
assert_spy_called spy, {:times => 3}, :foo
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_assert_detects_blocks
|
58
|
-
spy.foo { }
|
59
|
-
spy.bar
|
60
|
-
assert_spy_called spy, :foo, Proc
|
61
|
-
assert_spy_called spy, :bar
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_assert_detects_any_args
|
65
|
-
spy.foo
|
66
|
-
spy.foo(1)
|
67
|
-
spy.foo("HI")
|
68
|
-
spy.foo("Hello", "World", 10, :options => true)
|
69
|
-
assert_spy_called spy, {:times => 4}, :foo, :_
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_assert_rejects_bad_count_on_any_args
|
73
|
-
spy.foo
|
74
|
-
assert_fails(/^expected foo\(\.\.\.\) to be received by <FlexMock:AssertSpyCalledTest::FooBar Mock> twice/i) do
|
75
|
-
assert_spy_called spy, {:times => 2}, :foo, :_
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_assert_error_lists_calls_actually_made_without_handled_by
|
80
|
-
spy.foo
|
81
|
-
spy.bar(1)
|
82
|
-
ex = assert_fails(/The following messages have been received/) do
|
83
|
-
assert_spy_called spy, :baz
|
84
|
-
end
|
85
|
-
assert_match(/ foo\(\)/, ex.message)
|
86
|
-
assert_match(/ bar\(1\)/, ex.message)
|
87
|
-
assert_no_match(/ baz\(\)/, ex.message)
|
88
|
-
assert_no_match(/handled by/, ex.message)
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_assert_error_lists_calls_actually_made_with_handled_by
|
92
|
-
spy.should_receive(:foo).once
|
93
|
-
spy.foo
|
94
|
-
spy.bar(1)
|
95
|
-
ex = assert_fails(/The following messages have been received/) do
|
96
|
-
assert_spy_called spy, :baz
|
97
|
-
end
|
98
|
-
assert_match(/ foo\(\) matched by should_receive\(:foo\)/, ex.message)
|
99
|
-
assert_match(/ bar\(1\)/, ex.message)
|
100
|
-
assert_no_match(/ baz\(\)/, ex.message)
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_assert_errors_say_no_calls_made
|
104
|
-
assert_fails(/No messages have been received/) do
|
105
|
-
assert_spy_called spy, :baz
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
private
|
110
|
-
|
111
|
-
def assert_fails(message_pattern)
|
112
|
-
ex = assert_raises(FlexMock.framework_adapter.assertion_failed_error) do
|
113
|
-
yield
|
114
|
-
end
|
115
|
-
assert_match(message_pattern, ex.message)
|
116
|
-
ex
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
data/test/base_class_test.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'test/test_setup'
|
2
|
-
|
3
|
-
class BaseClassTest < Test::Unit::TestCase
|
4
|
-
include FlexMock::TestCase
|
5
|
-
|
6
|
-
class FooBar
|
7
|
-
def foo
|
8
|
-
end
|
9
|
-
|
10
|
-
def method_missing(sym, *args, &block)
|
11
|
-
return :poof if sym == :barq
|
12
|
-
super
|
13
|
-
end
|
14
|
-
|
15
|
-
def respond_to?(method)
|
16
|
-
method == :barq || super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def mock
|
21
|
-
@mock ||= flexmock(:on, FooBar)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_base_class_auto_mocks_class
|
25
|
-
assert_equal FooBar, mock.class
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_base_class_auto_mocks_base_class_methods
|
29
|
-
assert_equal FlexMock.undefined, mock.foo
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_base_class_does_not_mock_non_base_class_methods
|
33
|
-
assert_raise(NoMethodError) do
|
34
|
-
mock.fuzz
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_can_stub_existing_methods
|
39
|
-
mock.should_receive(:foo => :bar)
|
40
|
-
assert_equal :bar, mock.foo
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_can_not_stub_non_class_defined_methods
|
44
|
-
ex = assert_raises(NoMethodError) do
|
45
|
-
mock.should_receive(:baz => :bar)
|
46
|
-
end
|
47
|
-
assert_match(/can *not stub methods.*base.*class/i, ex.message)
|
48
|
-
assert_match(/class:.+FooBar/i, ex.message)
|
49
|
-
assert_match(/method:.+baz/i, ex.message)
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_can_not_stub_non_class_methods_in_single_line
|
53
|
-
ex = assert_raises(NoMethodError) do
|
54
|
-
flexmock(:on, FooBar, :bark => :value)
|
55
|
-
end
|
56
|
-
assert_match(/can *not stub methods.*base.*class/i, ex.message)
|
57
|
-
assert_match(/class:.+FooBar/i, ex.message)
|
58
|
-
assert_match(/method:.+bark/i, ex.message)
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_can_explicitly_stub_non_class_defined_methods
|
62
|
-
mock.should_receive(:baz).explicitly.and_return(:bar)
|
63
|
-
assert_equal :bar, mock.baz
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_can_explicitly_stub_meta_programmed_methods
|
67
|
-
mock.should_receive(:barq).explicitly.and_return(:bar)
|
68
|
-
assert_equal :bar, mock.barq
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|