test-doubles.md
... ...
@@ -140,8 +140,45 @@ of the delegation to the specific converter even if it's wrong; our stubbed test
140 140
what the actual class does at all: our test is completely independent. Additionally, we have moved the
141 141
key verification value closer to the assertion, which is easier to read.
142 142
143
+For here on out, we will use a different syntax in MiniTest. Here's the same test but using
144
+spec-style syntax using keywords such as "describe" and "expect."
145
+
146
+```ruby
147
+require 'minitest/autorun'
148
+
149
+class FToCConverter
150
+ def convert(value)
151
+ 500
152
+ end
153
+end
154
+
155
+class Converter
156
+ def initialize(specific_converter)
157
+ @specific_converter = specific_converter
158
+ end
159
+ def convert(value)
160
+ @specific_converter.convert(value)
161
+ end
162
+end
163
+
164
+describe Converter do
165
+ let(:specific_converter) { FToCConverter.new }
166
+ subject { Converter.new(specific_converter) }
167
+
168
+ it "can delegate to a specific converter" do
169
+ specific_converter.stub :convert, 400 do
170
+ expect subject.convert(32).must_be_within_epsilon 400, 0.01
171
+ end
172
+ end
173
+end
174
+```
175
+
143 176
Stubbing in MiniTest requires the the stubbed method actually exist in the instance being stubbed. Other
144
-testing frameworks are more lenient in this respect, which can result in more concise tests.
177
+testing frameworks are more lenient in this respect, which can result in more concise tests -- but at
178
+the expense of having test doubles that are _too_ fake and don't match up to your real collaborators. For
179
+example, you might stub a method `convert` but over time your collaborators change that method name
180
+to `transform`: Your tests would continue to pass because you've stubbed a method that doesn't exist
181
+on the real objects.
145 182
146 183
### Testing messages sent to others
147 184
... ...
@@ -161,4 +198,4 @@ When we send a message to another object that results in a side effect, we want
161 198
Other topics:
162 199
163 200
* The four-phase test.
164
-* Fixtures.
201
+* Fixtures.
... ...
\ No newline at end of file