much-stub 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/README.md +223 -39
- data/lib/much-stub.rb +14 -12
- data/lib/much-stub/version.rb +1 -1
- data/much-stub.gemspec +3 -3
- data/test/helper.rb +3 -3
- data/test/support/factory.rb +1 -2
- data/test/system/much-stub_tests.rb +204 -223
- data/test/unit/much-stub_tests.rb +96 -94
- metadata +5 -5
@@ -1,16 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "assert"
|
2
|
+
require "much-stub"
|
3
3
|
|
4
|
-
require
|
4
|
+
require "test/support/factory"
|
5
5
|
|
6
6
|
module MuchStub
|
7
|
-
|
8
7
|
class UnitTests < Assert::Context
|
9
8
|
desc "MuchStub"
|
10
9
|
end
|
11
10
|
|
12
|
-
class
|
13
|
-
desc "
|
11
|
+
class APITests < UnitTests
|
12
|
+
desc "API"
|
14
13
|
setup do
|
15
14
|
@orig_value = Factory.string
|
16
15
|
@stub_value = Factory.string
|
@@ -69,8 +68,8 @@ module MuchStub
|
|
69
68
|
|
70
69
|
should "be able to call a stub's original method" do
|
71
70
|
err = assert_raises(NotStubbedError){ MuchStub.stub_send(@myobj, :mymeth) }
|
72
|
-
assert_includes
|
73
|
-
assert_includes
|
71
|
+
assert_includes "not stubbed.", err.message
|
72
|
+
assert_includes "test/unit/much-stub_tests.rb", err.backtrace.first
|
74
73
|
|
75
74
|
MuchStub.(@myobj, :mymeth){ @stub_value }
|
76
75
|
|
@@ -78,13 +77,22 @@ module MuchStub
|
|
78
77
|
assert_equal @orig_value, MuchStub.stub_send(@myobj, :mymeth)
|
79
78
|
end
|
80
79
|
|
80
|
+
should "be able to add a stub tap" do
|
81
|
+
my_meth_called_with = nil
|
82
|
+
MuchStub.tap(@myobj, :mymeth){ |value, *args, &block|
|
83
|
+
my_meth_called_with = args
|
84
|
+
}
|
85
|
+
|
86
|
+
assert_equal @orig_value, @myobj.mymeth
|
87
|
+
assert_equal [], my_meth_called_with
|
88
|
+
end
|
81
89
|
end
|
82
90
|
|
83
91
|
class StubTests < UnitTests
|
84
92
|
desc "Stub"
|
85
93
|
setup do
|
86
94
|
@myclass = Class.new do
|
87
|
-
def mymeth;
|
95
|
+
def mymeth; "meth"; end
|
88
96
|
def myval(val); val; end
|
89
97
|
def myargs(*args); args; end
|
90
98
|
def myvalargs(val1, val2, *args); [val1, val2, args]; end
|
@@ -108,7 +116,7 @@ module MuchStub
|
|
108
116
|
end
|
109
117
|
|
110
118
|
should "know its names" do
|
111
|
-
assert_equal
|
119
|
+
assert_equal "mymeth", subject.method_name
|
112
120
|
expected = "__muchstub_stub__#{@myobj.object_id}_#{subject.method_name}"
|
113
121
|
assert_equal expected, subject.name
|
114
122
|
expected = "@__muchstub_stub_#{@myobj.object_id}_" \
|
@@ -118,23 +126,23 @@ module MuchStub
|
|
118
126
|
|
119
127
|
should "complain when called if no do block was given" do
|
120
128
|
err = assert_raises(MuchStub::NotStubbedError){ @myobj.mymeth }
|
121
|
-
assert_includes
|
122
|
-
assert_includes
|
129
|
+
assert_includes "not stubbed.", err.message
|
130
|
+
assert_includes "test/unit/much-stub_tests.rb", err.backtrace.first
|
123
131
|
|
124
|
-
subject.do = proc{
|
132
|
+
subject.do = proc{ "mymeth" }
|
125
133
|
assert_nothing_raised do
|
126
134
|
@myobj.mymeth
|
127
135
|
end
|
128
136
|
|
129
137
|
assert_nothing_raised do
|
130
|
-
MuchStub::Stub.new(@myobj, :mymeth){
|
138
|
+
MuchStub::Stub.new(@myobj, :mymeth){ "mymeth" }
|
131
139
|
end
|
132
140
|
end
|
133
141
|
|
134
142
|
should "complain if stubbing a method that the object doesn't respond to" do
|
135
143
|
err = assert_raises(MuchStub::StubError){ MuchStub::Stub.new(@myobj, :some_other_meth) }
|
136
|
-
assert_includes
|
137
|
-
assert_includes
|
144
|
+
assert_includes "does not respond to", err.message
|
145
|
+
assert_includes "test/unit/much-stub_tests.rb", err.backtrace.first
|
138
146
|
end
|
139
147
|
|
140
148
|
should "complain if stubbed and called with no `do` proc given" do
|
@@ -142,20 +150,20 @@ module MuchStub
|
|
142
150
|
end
|
143
151
|
|
144
152
|
should "complain if stubbed and called with mismatched arity" do
|
145
|
-
MuchStub::Stub.new(@myobj, :myval){
|
153
|
+
MuchStub::Stub.new(@myobj, :myval){ "myval" }
|
146
154
|
err = assert_raises(MuchStub::StubArityError){ @myobj.myval }
|
147
|
-
assert_includes
|
148
|
-
assert_includes
|
155
|
+
assert_includes "arity mismatch on", err.message
|
156
|
+
assert_includes "test/unit/much-stub_tests.rb", err.backtrace.first
|
149
157
|
|
150
158
|
assert_nothing_raised { @myobj.myval(1) }
|
151
159
|
assert_raises(MuchStub::StubArityError){ @myobj.myval(1,2) }
|
152
160
|
|
153
|
-
MuchStub::Stub.new(@myobj, :myargs){
|
161
|
+
MuchStub::Stub.new(@myobj, :myargs){ "myargs" }
|
154
162
|
assert_nothing_raised { @myobj.myargs }
|
155
163
|
assert_nothing_raised { @myobj.myargs(1) }
|
156
164
|
assert_nothing_raised { @myobj.myargs(1,2) }
|
157
165
|
|
158
|
-
MuchStub::Stub.new(@myobj, :myvalargs){
|
166
|
+
MuchStub::Stub.new(@myobj, :myvalargs){ "myvalargs" }
|
159
167
|
assert_raises(MuchStub::StubArityError){ @myobj.myvalargs }
|
160
168
|
assert_raises(MuchStub::StubArityError){ @myobj.myvalargs(1) }
|
161
169
|
assert_nothing_raised { @myobj.myvalargs(1,2) }
|
@@ -164,75 +172,75 @@ module MuchStub
|
|
164
172
|
|
165
173
|
should "complain if stubbed with mismatched arity" do
|
166
174
|
err = assert_raises(MuchStub::StubArityError) do
|
167
|
-
MuchStub::Stub.new(@myobj, :myval).with(){
|
175
|
+
MuchStub::Stub.new(@myobj, :myval).with(){ "myval" }
|
168
176
|
end
|
169
|
-
assert_includes
|
170
|
-
assert_includes
|
177
|
+
assert_includes "arity mismatch on", err.message
|
178
|
+
assert_includes "test/unit/much-stub_tests.rb", err.backtrace.first
|
171
179
|
|
172
180
|
assert_raises(MuchStub::StubArityError) do
|
173
|
-
MuchStub::Stub.new(@myobj, :myval).with(1,2){
|
181
|
+
MuchStub::Stub.new(@myobj, :myval).with(1,2){ "myval" }
|
174
182
|
end
|
175
183
|
assert_nothing_raised do
|
176
|
-
MuchStub::Stub.new(@myobj, :myval).with(1){
|
184
|
+
MuchStub::Stub.new(@myobj, :myval).with(1){ "myval" }
|
177
185
|
end
|
178
186
|
|
179
187
|
assert_nothing_raised do
|
180
|
-
MuchStub::Stub.new(@myobj, :myargs).with(){
|
188
|
+
MuchStub::Stub.new(@myobj, :myargs).with(){ "myargs" }
|
181
189
|
end
|
182
190
|
assert_nothing_raised do
|
183
|
-
MuchStub::Stub.new(@myobj, :myargs).with(1,2){
|
191
|
+
MuchStub::Stub.new(@myobj, :myargs).with(1,2){ "myargs" }
|
184
192
|
end
|
185
193
|
assert_nothing_raised do
|
186
|
-
MuchStub::Stub.new(@myobj, :myargs).with(1){
|
194
|
+
MuchStub::Stub.new(@myobj, :myargs).with(1){ "myargs" }
|
187
195
|
end
|
188
196
|
|
189
197
|
assert_raises(MuchStub::StubArityError) do
|
190
|
-
MuchStub::Stub.new(@myobj, :myvalargs).with(){
|
198
|
+
MuchStub::Stub.new(@myobj, :myvalargs).with(){ "myvalargs" }
|
191
199
|
end
|
192
200
|
assert_raises(MuchStub::StubArityError) do
|
193
|
-
MuchStub::Stub.new(@myobj, :myvalargs).with(1){
|
201
|
+
MuchStub::Stub.new(@myobj, :myvalargs).with(1){ "myvalargs" }
|
194
202
|
end
|
195
203
|
assert_nothing_raised do
|
196
|
-
MuchStub::Stub.new(@myobj, :myvalargs).with(1,2){
|
204
|
+
MuchStub::Stub.new(@myobj, :myvalargs).with(1,2){ "myvalargs" }
|
197
205
|
end
|
198
206
|
assert_nothing_raised do
|
199
|
-
MuchStub::Stub.new(@myobj, :myvalargs).with(1,2,3){
|
207
|
+
MuchStub::Stub.new(@myobj, :myvalargs).with(1,2,3){ "myvalargs" }
|
200
208
|
end
|
201
209
|
end
|
202
210
|
|
203
211
|
should "stub methods with no args" do
|
204
212
|
subject.teardown
|
205
213
|
|
206
|
-
assert_equal
|
207
|
-
MuchStub::Stub.new(@myobj, :mymeth){
|
208
|
-
assert_equal
|
214
|
+
assert_equal "meth", @myobj.mymeth
|
215
|
+
MuchStub::Stub.new(@myobj, :mymeth){ "mymeth" }
|
216
|
+
assert_equal "mymeth", @myobj.mymeth
|
209
217
|
end
|
210
218
|
|
211
219
|
should "stub methods with required arg" do
|
212
220
|
assert_equal 1, @myobj.myval(1)
|
213
221
|
stub = MuchStub::Stub.new(@myobj, :myval){ |val| val.to_s }
|
214
|
-
assert_equal
|
215
|
-
assert_equal
|
216
|
-
stub.with(2){
|
217
|
-
assert_equal
|
222
|
+
assert_equal "1", @myobj.myval(1)
|
223
|
+
assert_equal "2", @myobj.myval(2)
|
224
|
+
stub.with(2){ "two" }
|
225
|
+
assert_equal "two", @myobj.myval(2)
|
218
226
|
end
|
219
227
|
|
220
228
|
should "stub methods with variable args" do
|
221
229
|
assert_equal [1,2], @myobj.myargs(1,2)
|
222
|
-
stub = MuchStub::Stub.new(@myobj, :myargs){ |*args| args.join(
|
223
|
-
assert_equal
|
224
|
-
assert_equal
|
225
|
-
stub.with(3,4,5){
|
226
|
-
assert_equal
|
230
|
+
stub = MuchStub::Stub.new(@myobj, :myargs){ |*args| args.join(",") }
|
231
|
+
assert_equal "1,2", @myobj.myargs(1,2)
|
232
|
+
assert_equal "3,4,5", @myobj.myargs(3,4,5)
|
233
|
+
stub.with(3,4,5){ "three-four-five" }
|
234
|
+
assert_equal "three-four-five", @myobj.myargs(3,4,5)
|
227
235
|
end
|
228
236
|
|
229
237
|
should "stub methods with required args and variable args" do
|
230
238
|
assert_equal [1,2, [3]], @myobj.myvalargs(1,2,3)
|
231
|
-
stub = MuchStub::Stub.new(@myobj, :myvalargs){ |*args| args.join(
|
232
|
-
assert_equal
|
233
|
-
assert_equal
|
234
|
-
stub.with(3,4,5){
|
235
|
-
assert_equal
|
239
|
+
stub = MuchStub::Stub.new(@myobj, :myvalargs){ |*args| args.join(",") }
|
240
|
+
assert_equal "1,2,3", @myobj.myvalargs(1,2,3)
|
241
|
+
assert_equal "3,4,5", @myobj.myvalargs(3,4,5)
|
242
|
+
stub.with(3,4,5){ "three-four-five" }
|
243
|
+
assert_equal "three-four-five", @myobj.myvalargs(3,4,5)
|
236
244
|
end
|
237
245
|
|
238
246
|
should "stub methods that yield blocks" do
|
@@ -242,9 +250,9 @@ module MuchStub
|
|
242
250
|
assert_equal true, blkcalled
|
243
251
|
|
244
252
|
blkcalled = false
|
245
|
-
MuchStub::Stub.new(@myobj, :myblk){ blkcalled =
|
253
|
+
MuchStub::Stub.new(@myobj, :myblk){ blkcalled = "true" }
|
246
254
|
@myobj.myblk(&blk)
|
247
|
-
assert_equal
|
255
|
+
assert_equal "true", blkcalled
|
248
256
|
end
|
249
257
|
|
250
258
|
should "stub methods even if they are not local to the object" do
|
@@ -263,56 +271,56 @@ module MuchStub
|
|
263
271
|
|
264
272
|
assert_equal [1,2,[3]], mydelegator.myvalargs(1,2,3)
|
265
273
|
stub = MuchStub::Stub.new(mydelegator, :myvalargs){ |*args| args.inspect }
|
266
|
-
assert_equal
|
267
|
-
assert_equal
|
268
|
-
stub.with(4,5,6){
|
269
|
-
assert_equal
|
274
|
+
assert_equal "[1, 2, 3]", mydelegator.myvalargs(1,2,3)
|
275
|
+
assert_equal "[4, 5, 6]", mydelegator.myvalargs(4,5,6)
|
276
|
+
stub.with(4,5,6){ "four-five-six" }
|
277
|
+
assert_equal "four-five-six", mydelegator.myvalargs(4,5,6)
|
270
278
|
end
|
271
279
|
|
272
280
|
should "call to the original method" do
|
273
281
|
subject.teardown
|
274
282
|
|
275
283
|
# no args
|
276
|
-
stub = MuchStub::Stub.new(@myobj, :mymeth){
|
277
|
-
assert_equal
|
278
|
-
assert_equal
|
284
|
+
stub = MuchStub::Stub.new(@myobj, :mymeth){ "mymeth" }
|
285
|
+
assert_equal "mymeth", stub.call([])
|
286
|
+
assert_equal "meth", stub.call_method([])
|
279
287
|
|
280
288
|
# static args
|
281
289
|
stub = MuchStub::Stub.new(@myobj, :myval){ |val| val.to_s }
|
282
|
-
assert_equal
|
290
|
+
assert_equal "1", stub.call([1])
|
283
291
|
assert_equal 1, stub.call_method([1])
|
284
|
-
assert_equal
|
292
|
+
assert_equal "2", stub.call([2])
|
285
293
|
assert_equal 2, stub.call_method([2])
|
286
|
-
stub.with(2){
|
287
|
-
assert_equal
|
294
|
+
stub.with(2){ "two" }
|
295
|
+
assert_equal "two", stub.call([2])
|
288
296
|
assert_equal 2, stub.call_method([2])
|
289
297
|
|
290
298
|
# dynamic args
|
291
|
-
stub = MuchStub::Stub.new(@myobj, :myargs){ |*args| args.join(
|
292
|
-
assert_equal
|
299
|
+
stub = MuchStub::Stub.new(@myobj, :myargs){ |*args| args.join(",") }
|
300
|
+
assert_equal "1,2", stub.call([1,2])
|
293
301
|
assert_equal [1,2], stub.call_method([1,2])
|
294
|
-
assert_equal
|
302
|
+
assert_equal "3,4,5", stub.call([3,4,5])
|
295
303
|
assert_equal [3,4,5], stub.call_method([3,4,5])
|
296
|
-
stub.with(3,4,5){
|
297
|
-
assert_equal
|
304
|
+
stub.with(3,4,5){ "three-four-five" }
|
305
|
+
assert_equal "three-four-five", stub.call([3,4,5])
|
298
306
|
assert_equal [3,4,5], stub.call_method([3,4,5])
|
299
307
|
|
300
308
|
# mixed static/dynamic args
|
301
|
-
stub = MuchStub::Stub.new(@myobj, :myvalargs){ |*args| args.join(
|
302
|
-
assert_equal
|
309
|
+
stub = MuchStub::Stub.new(@myobj, :myvalargs){ |*args| args.join(",") }
|
310
|
+
assert_equal "1,2,3", stub.call([1,2,3])
|
303
311
|
assert_equal [1,2, [3]], stub.call_method([1,2,3])
|
304
|
-
assert_equal
|
312
|
+
assert_equal "3,4,5", stub.call([3,4,5])
|
305
313
|
assert_equal [3,4,[5]], stub.call_method([3,4,5])
|
306
|
-
stub.with(3,4,5){
|
307
|
-
assert_equal
|
314
|
+
stub.with(3,4,5){ "three-four-five" }
|
315
|
+
assert_equal "three-four-five", stub.call([3,4,5])
|
308
316
|
assert_equal [3,4,[5]], stub.call_method([3,4,5])
|
309
317
|
|
310
318
|
# blocks
|
311
319
|
blkcalled = false
|
312
320
|
blk = proc{ blkcalled = true }
|
313
|
-
stub = MuchStub::Stub.new(@myobj, :myblk){ blkcalled =
|
321
|
+
stub = MuchStub::Stub.new(@myobj, :myblk){ blkcalled = "true" }
|
314
322
|
stub.call([], &blk)
|
315
|
-
assert_equal
|
323
|
+
assert_equal "true", blkcalled
|
316
324
|
stub.call_method([], &blk)
|
317
325
|
assert_equal true, blkcalled
|
318
326
|
end
|
@@ -326,17 +334,16 @@ module MuchStub
|
|
326
334
|
should "be removable" do
|
327
335
|
assert_equal 1, @myobj.myval(1)
|
328
336
|
stub = MuchStub::Stub.new(@myobj, :myval){ |val| val.to_s }
|
329
|
-
assert_equal
|
337
|
+
assert_equal "1", @myobj.myval(1)
|
330
338
|
stub.teardown
|
331
339
|
assert_equal 1, @myobj.myval(1)
|
332
340
|
end
|
333
341
|
|
334
342
|
should "have a readable inspect" do
|
335
|
-
expected = "#<#{subject.class}:#{
|
343
|
+
expected = "#<#{subject.class}:#{"0x0%x" % (subject.object_id << 1)}" \
|
336
344
|
" @method_name=#{subject.method_name.inspect}>"
|
337
345
|
assert_equal expected, subject.inspect
|
338
346
|
end
|
339
|
-
|
340
347
|
end
|
341
348
|
|
342
349
|
class MutatingArgsStubTests < StubTests
|
@@ -354,7 +361,6 @@ module MuchStub
|
|
354
361
|
should "not raise a stub error when called" do
|
355
362
|
assert_nothing_raised{ @stub.call([@arg]) }
|
356
363
|
end
|
357
|
-
|
358
364
|
end
|
359
365
|
|
360
366
|
class StubInheritedMethodAfterStubbedOnParentTests < StubTests
|
@@ -369,11 +375,11 @@ module MuchStub
|
|
369
375
|
|
370
376
|
should "allow stubbing them independently of each other" do
|
371
377
|
assert_nothing_raised do
|
372
|
-
@parent_stub.with(1, 2){
|
373
|
-
@child_stub.with(1, 2){
|
378
|
+
@parent_stub.with(1, 2){ "parent" }
|
379
|
+
@child_stub.with(1, 2){ "child" }
|
374
380
|
end
|
375
|
-
assert_equal
|
376
|
-
assert_equal
|
381
|
+
assert_equal "parent", @parent_class.new(1, 2)
|
382
|
+
assert_equal "child", @child_class.new(1, 2)
|
377
383
|
end
|
378
384
|
|
379
385
|
should "not raise any errors when tearing down the parent before the child" do
|
@@ -382,7 +388,6 @@ module MuchStub
|
|
382
388
|
@child_stub.teardown
|
383
389
|
end
|
384
390
|
end
|
385
|
-
|
386
391
|
end
|
387
392
|
|
388
393
|
class NullStubTests < UnitTests
|
@@ -393,7 +398,6 @@ module MuchStub
|
|
393
398
|
subject{ @ns }
|
394
399
|
|
395
400
|
should have_imeths :teardown
|
396
|
-
|
397
401
|
end
|
398
402
|
|
399
403
|
class ParameterListTests < UnitTests
|
@@ -401,7 +405,7 @@ module MuchStub
|
|
401
405
|
setup do
|
402
406
|
many_args = (0..ParameterList::LETTERS.size).map do
|
403
407
|
Assert::Factory.string
|
404
|
-
end.join(
|
408
|
+
end.join(", ")
|
405
409
|
@object = Class.new
|
406
410
|
# use `class_eval` with string to easily define methods with many params
|
407
411
|
@object.class_eval <<-methods
|
@@ -414,23 +418,22 @@ module MuchStub
|
|
414
418
|
subject{ ParameterList }
|
415
419
|
|
416
420
|
should "build a parameter list for a method that takes no args" do
|
417
|
-
assert_equal
|
421
|
+
assert_equal "&block", subject.new(@object, "noargs")
|
418
422
|
end
|
419
423
|
|
420
424
|
should "build a parameter list for a method that takes any args" do
|
421
|
-
assert_equal
|
425
|
+
assert_equal "*args, &block", subject.new(@object, "anyargs")
|
422
426
|
end
|
423
427
|
|
424
428
|
should "build a parameter list for a method that takes many args" do
|
425
|
-
expected = "#{ParameterList::LETTERS.join(
|
426
|
-
assert_equal expected, subject.new(@object,
|
429
|
+
expected = "#{ParameterList::LETTERS.join(", ")}, aa, &block"
|
430
|
+
assert_equal expected, subject.new(@object, "manyargs")
|
427
431
|
end
|
428
432
|
|
429
433
|
should "build a parameter list for a method that takes a minimum number of args" do
|
430
|
-
expected = "#{ParameterList::LETTERS.join(
|
431
|
-
assert_equal expected, subject.new(@object,
|
434
|
+
expected = "#{ParameterList::LETTERS.join(", ")}, aa, *args, &block"
|
435
|
+
assert_equal expected, subject.new(@object, "minargs")
|
432
436
|
end
|
433
|
-
|
434
437
|
end
|
435
438
|
|
436
439
|
class ChangeHashObject
|
@@ -446,5 +449,4 @@ module MuchStub
|
|
446
449
|
@value = 1
|
447
450
|
end
|
448
451
|
end
|
449
|
-
|
450
452
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: much-stub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Redding
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-01-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: assert
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 2.
|
20
|
+
version: 2.18.0
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 2.
|
27
|
+
version: 2.18.0
|
28
28
|
description: Stubbing API for replacing method calls on objects in test runs.
|
29
29
|
email:
|
30
30
|
- kelly@kellyredding.com
|
@@ -66,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
66
66
|
version: '0'
|
67
67
|
requirements: []
|
68
68
|
rubyforge_project:
|
69
|
-
rubygems_version: 2.7.
|
69
|
+
rubygems_version: 2.7.6.2
|
70
70
|
signing_key:
|
71
71
|
specification_version: 4
|
72
72
|
summary: Stubbing API for replacing method calls on objects in test runs.
|