Mercurial > hg > isophonics-drupal-site
comparison vendor/phpunit/phpunit-mock-objects/tests/MockObjectTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 /* | |
3 * This file is part of the PHPUnit_MockObject package. | |
4 * | |
5 * (c) Sebastian Bergmann <sebastian@phpunit.de> | |
6 * | |
7 * For the full copyright and license information, please view the LICENSE | |
8 * file that was distributed with this source code. | |
9 */ | |
10 | |
11 /** | |
12 * | |
13 * | |
14 * @since Class available since Release 3.0.0 | |
15 */ | |
16 class Framework_MockObjectTest extends PHPUnit_Framework_TestCase | |
17 { | |
18 public function testMockedMethodIsNeverCalled() | |
19 { | |
20 $mock = $this->getMock('AnInterface'); | |
21 $mock->expects($this->never()) | |
22 ->method('doSomething'); | |
23 } | |
24 | |
25 public function testMockedMethodIsNeverCalledWithParameter() | |
26 { | |
27 $mock = $this->getMock('SomeClass'); | |
28 $mock->expects($this->never()) | |
29 ->method('doSomething') | |
30 ->with('someArg'); | |
31 } | |
32 | |
33 public function testMockedMethodIsNotCalledWhenExpectsAnyWithParameter() | |
34 { | |
35 $mock = $this->getMock('SomeClass'); | |
36 $mock->expects($this->any()) | |
37 ->method('doSomethingElse') | |
38 ->with('someArg'); | |
39 } | |
40 | |
41 public function testMockedMethodIsNotCalledWhenMethodSpecifiedDirectlyWithParameter() | |
42 { | |
43 $mock = $this->getMock('SomeClass'); | |
44 $mock->method('doSomethingElse') | |
45 ->with('someArg'); | |
46 } | |
47 | |
48 public function testMockedMethodIsCalledAtLeastOnce() | |
49 { | |
50 $mock = $this->getMock('AnInterface'); | |
51 $mock->expects($this->atLeastOnce()) | |
52 ->method('doSomething'); | |
53 | |
54 $mock->doSomething(); | |
55 } | |
56 | |
57 public function testMockedMethodIsCalledAtLeastOnce2() | |
58 { | |
59 $mock = $this->getMock('AnInterface'); | |
60 $mock->expects($this->atLeastOnce()) | |
61 ->method('doSomething'); | |
62 | |
63 $mock->doSomething(); | |
64 $mock->doSomething(); | |
65 } | |
66 | |
67 public function testMockedMethodIsCalledAtLeastTwice() | |
68 { | |
69 $mock = $this->getMock('AnInterface'); | |
70 $mock->expects($this->atLeast(2)) | |
71 ->method('doSomething'); | |
72 | |
73 $mock->doSomething(); | |
74 $mock->doSomething(); | |
75 } | |
76 | |
77 public function testMockedMethodIsCalledAtLeastTwice2() | |
78 { | |
79 $mock = $this->getMock('AnInterface'); | |
80 $mock->expects($this->atLeast(2)) | |
81 ->method('doSomething'); | |
82 | |
83 $mock->doSomething(); | |
84 $mock->doSomething(); | |
85 $mock->doSomething(); | |
86 } | |
87 | |
88 public function testMockedMethodIsCalledAtMostTwice() | |
89 { | |
90 $mock = $this->getMock('AnInterface'); | |
91 $mock->expects($this->atMost(2)) | |
92 ->method('doSomething'); | |
93 | |
94 $mock->doSomething(); | |
95 $mock->doSomething(); | |
96 } | |
97 | |
98 public function testMockedMethodIsCalledAtMosttTwice2() | |
99 { | |
100 $mock = $this->getMock('AnInterface'); | |
101 $mock->expects($this->atMost(2)) | |
102 ->method('doSomething'); | |
103 | |
104 $mock->doSomething(); | |
105 } | |
106 | |
107 public function testMockedMethodIsCalledOnce() | |
108 { | |
109 $mock = $this->getMock('AnInterface'); | |
110 $mock->expects($this->once()) | |
111 ->method('doSomething'); | |
112 | |
113 $mock->doSomething(); | |
114 } | |
115 | |
116 public function testMockedMethodIsCalledOnceWithParameter() | |
117 { | |
118 $mock = $this->getMock('SomeClass'); | |
119 $mock->expects($this->once()) | |
120 ->method('doSomethingElse') | |
121 ->with($this->equalTo('something')); | |
122 | |
123 $mock->doSomethingElse('something'); | |
124 } | |
125 | |
126 public function testMockedMethodIsCalledExactly() | |
127 { | |
128 $mock = $this->getMock('AnInterface'); | |
129 $mock->expects($this->exactly(2)) | |
130 ->method('doSomething'); | |
131 | |
132 $mock->doSomething(); | |
133 $mock->doSomething(); | |
134 } | |
135 | |
136 public function testStubbedException() | |
137 { | |
138 $mock = $this->getMock('AnInterface'); | |
139 $mock->expects($this->any()) | |
140 ->method('doSomething') | |
141 ->will($this->throwException(new Exception)); | |
142 | |
143 try { | |
144 $mock->doSomething(); | |
145 } catch (Exception $e) { | |
146 return; | |
147 } | |
148 | |
149 $this->fail(); | |
150 } | |
151 | |
152 public function testStubbedWillThrowException() | |
153 { | |
154 $mock = $this->getMock('AnInterface'); | |
155 $mock->expects($this->any()) | |
156 ->method('doSomething') | |
157 ->willThrowException(new Exception); | |
158 | |
159 try { | |
160 $mock->doSomething(); | |
161 } catch (Exception $e) { | |
162 return; | |
163 } | |
164 | |
165 $this->fail(); | |
166 } | |
167 | |
168 public function testStubbedReturnValue() | |
169 { | |
170 $mock = $this->getMock('AnInterface'); | |
171 $mock->expects($this->any()) | |
172 ->method('doSomething') | |
173 ->will($this->returnValue('something')); | |
174 | |
175 $this->assertEquals('something', $mock->doSomething()); | |
176 | |
177 $mock = $this->getMock('AnInterface'); | |
178 $mock->expects($this->any()) | |
179 ->method('doSomething') | |
180 ->willReturn('something'); | |
181 | |
182 $this->assertEquals('something', $mock->doSomething()); | |
183 } | |
184 | |
185 public function testStubbedReturnValueMap() | |
186 { | |
187 $map = array( | |
188 array('a', 'b', 'c', 'd'), | |
189 array('e', 'f', 'g', 'h') | |
190 ); | |
191 | |
192 $mock = $this->getMock('AnInterface'); | |
193 $mock->expects($this->any()) | |
194 ->method('doSomething') | |
195 ->will($this->returnValueMap($map)); | |
196 | |
197 $this->assertEquals('d', $mock->doSomething('a', 'b', 'c')); | |
198 $this->assertEquals('h', $mock->doSomething('e', 'f', 'g')); | |
199 $this->assertEquals(null, $mock->doSomething('foo', 'bar')); | |
200 | |
201 $mock = $this->getMock('AnInterface'); | |
202 $mock->expects($this->any()) | |
203 ->method('doSomething') | |
204 ->willReturnMap($map); | |
205 | |
206 $this->assertEquals('d', $mock->doSomething('a', 'b', 'c')); | |
207 $this->assertEquals('h', $mock->doSomething('e', 'f', 'g')); | |
208 $this->assertEquals(null, $mock->doSomething('foo', 'bar')); | |
209 } | |
210 | |
211 public function testStubbedReturnArgument() | |
212 { | |
213 $mock = $this->getMock('AnInterface'); | |
214 $mock->expects($this->any()) | |
215 ->method('doSomething') | |
216 ->will($this->returnArgument(1)); | |
217 | |
218 $this->assertEquals('b', $mock->doSomething('a', 'b')); | |
219 | |
220 $mock = $this->getMock('AnInterface'); | |
221 $mock->expects($this->any()) | |
222 ->method('doSomething') | |
223 ->willReturnArgument(1); | |
224 | |
225 $this->assertEquals('b', $mock->doSomething('a', 'b')); | |
226 } | |
227 | |
228 public function testFunctionCallback() | |
229 { | |
230 $mock = $this->getMock('SomeClass', array('doSomething'), array(), '', false); | |
231 $mock->expects($this->once()) | |
232 ->method('doSomething') | |
233 ->will($this->returnCallback('functionCallback')); | |
234 | |
235 $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); | |
236 | |
237 $mock = $this->getMock('SomeClass', array('doSomething'), array(), '', false); | |
238 $mock->expects($this->once()) | |
239 ->method('doSomething') | |
240 ->willReturnCallback('functionCallback'); | |
241 | |
242 $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); | |
243 } | |
244 | |
245 public function testStubbedReturnSelf() | |
246 { | |
247 $mock = $this->getMock('AnInterface'); | |
248 $mock->expects($this->any()) | |
249 ->method('doSomething') | |
250 ->will($this->returnSelf()); | |
251 | |
252 $this->assertEquals($mock, $mock->doSomething()); | |
253 | |
254 $mock = $this->getMock('AnInterface'); | |
255 $mock->expects($this->any()) | |
256 ->method('doSomething') | |
257 ->willReturnSelf(); | |
258 | |
259 $this->assertEquals($mock, $mock->doSomething()); | |
260 } | |
261 | |
262 public function testStubbedReturnOnConsecutiveCalls() | |
263 { | |
264 $mock = $this->getMock('AnInterface'); | |
265 $mock->expects($this->any()) | |
266 ->method('doSomething') | |
267 ->will($this->onConsecutiveCalls('a', 'b', 'c')); | |
268 | |
269 $this->assertEquals('a', $mock->doSomething()); | |
270 $this->assertEquals('b', $mock->doSomething()); | |
271 $this->assertEquals('c', $mock->doSomething()); | |
272 | |
273 $mock = $this->getMock('AnInterface'); | |
274 $mock->expects($this->any()) | |
275 ->method('doSomething') | |
276 ->willReturnOnConsecutiveCalls('a', 'b', 'c'); | |
277 | |
278 $this->assertEquals('a', $mock->doSomething()); | |
279 $this->assertEquals('b', $mock->doSomething()); | |
280 $this->assertEquals('c', $mock->doSomething()); | |
281 } | |
282 | |
283 public function testStaticMethodCallback() | |
284 { | |
285 $mock = $this->getMock('SomeClass', array('doSomething'), array(), '', false); | |
286 $mock->expects($this->once()) | |
287 ->method('doSomething') | |
288 ->will($this->returnCallback(array('MethodCallback', 'staticCallback'))); | |
289 | |
290 $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); | |
291 } | |
292 | |
293 public function testPublicMethodCallback() | |
294 { | |
295 $mock = $this->getMock('SomeClass', array('doSomething'), array(), '', false); | |
296 $mock->expects($this->once()) | |
297 ->method('doSomething') | |
298 ->will($this->returnCallback(array(new MethodCallback, 'nonStaticCallback'))); | |
299 | |
300 $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); | |
301 } | |
302 | |
303 public function testMockClassOnlyGeneratedOnce() | |
304 { | |
305 $mock1 = $this->getMock('AnInterface'); | |
306 $mock2 = $this->getMock('AnInterface'); | |
307 | |
308 $this->assertEquals(get_class($mock1), get_class($mock2)); | |
309 } | |
310 | |
311 public function testMockClassDifferentForPartialMocks() | |
312 { | |
313 $mock1 = $this->getMock('PartialMockTestClass'); | |
314 $mock2 = $this->getMock('PartialMockTestClass', array('doSomething')); | |
315 $mock3 = $this->getMock('PartialMockTestClass', array('doSomething')); | |
316 $mock4 = $this->getMock('PartialMockTestClass', array('doAnotherThing')); | |
317 $mock5 = $this->getMock('PartialMockTestClass', array('doAnotherThing')); | |
318 | |
319 $this->assertNotEquals(get_class($mock1), get_class($mock2)); | |
320 $this->assertNotEquals(get_class($mock1), get_class($mock3)); | |
321 $this->assertNotEquals(get_class($mock1), get_class($mock4)); | |
322 $this->assertNotEquals(get_class($mock1), get_class($mock5)); | |
323 $this->assertEquals(get_class($mock2), get_class($mock3)); | |
324 $this->assertNotEquals(get_class($mock2), get_class($mock4)); | |
325 $this->assertNotEquals(get_class($mock2), get_class($mock5)); | |
326 $this->assertEquals(get_class($mock4), get_class($mock5)); | |
327 } | |
328 | |
329 public function testMockClassStoreOverrulable() | |
330 { | |
331 $mock1 = $this->getMock('PartialMockTestClass'); | |
332 $mock2 = $this->getMock('PartialMockTestClass', array(), array(), 'MyMockClassNameForPartialMockTestClass1'); | |
333 $mock3 = $this->getMock('PartialMockTestClass'); | |
334 $mock4 = $this->getMock('PartialMockTestClass', array('doSomething'), array(), 'AnotherMockClassNameForPartialMockTestClass'); | |
335 $mock5 = $this->getMock('PartialMockTestClass', array(), array(), 'MyMockClassNameForPartialMockTestClass2'); | |
336 | |
337 $this->assertNotEquals(get_class($mock1), get_class($mock2)); | |
338 $this->assertEquals(get_class($mock1), get_class($mock3)); | |
339 $this->assertNotEquals(get_class($mock1), get_class($mock4)); | |
340 $this->assertNotEquals(get_class($mock2), get_class($mock3)); | |
341 $this->assertNotEquals(get_class($mock2), get_class($mock4)); | |
342 $this->assertNotEquals(get_class($mock2), get_class($mock5)); | |
343 $this->assertNotEquals(get_class($mock3), get_class($mock4)); | |
344 $this->assertNotEquals(get_class($mock3), get_class($mock5)); | |
345 $this->assertNotEquals(get_class($mock4), get_class($mock5)); | |
346 } | |
347 | |
348 /** | |
349 * @covers PHPUnit_Framework_MockObject_Generator::getMock | |
350 */ | |
351 public function testGetMockWithFixedClassNameCanProduceTheSameMockTwice() | |
352 { | |
353 $mock = $this->getMockBuilder('StdClass')->setMockClassName('FixedName')->getMock(); | |
354 $mock = $this->getMockBuilder('StdClass')->setMockClassName('FixedName')->getMock(); | |
355 $this->assertInstanceOf('StdClass', $mock); | |
356 } | |
357 | |
358 public function testOriginalConstructorSettingConsidered() | |
359 { | |
360 $mock1 = $this->getMock('PartialMockTestClass'); | |
361 $mock2 = $this->getMock('PartialMockTestClass', array(), array(), '', false); | |
362 | |
363 $this->assertTrue($mock1->constructorCalled); | |
364 $this->assertFalse($mock2->constructorCalled); | |
365 } | |
366 | |
367 public function testOriginalCloneSettingConsidered() | |
368 { | |
369 $mock1 = $this->getMock('PartialMockTestClass'); | |
370 $mock2 = $this->getMock('PartialMockTestClass', array(), array(), '', true, false); | |
371 | |
372 $this->assertNotEquals(get_class($mock1), get_class($mock2)); | |
373 } | |
374 | |
375 public function testGetMockForAbstractClass() | |
376 { | |
377 $mock = $this->getMock('AbstractMockTestClass'); | |
378 $mock->expects($this->never()) | |
379 ->method('doSomething'); | |
380 } | |
381 | |
382 public function traversableProvider() | |
383 { | |
384 return array( | |
385 array('Traversable'), | |
386 array('\Traversable'), | |
387 array('TraversableMockTestInterface'), | |
388 array(array('Traversable')), | |
389 array(array('Iterator','Traversable')), | |
390 array(array('\Iterator','\Traversable')) | |
391 ); | |
392 } | |
393 | |
394 /** | |
395 * @dataProvider traversableProvider | |
396 */ | |
397 public function testGetMockForTraversable($type) | |
398 { | |
399 $mock = $this->getMock($type); | |
400 $this->assertInstanceOf('Traversable', $mock); | |
401 } | |
402 | |
403 public function testMultipleInterfacesCanBeMockedInSingleObject() | |
404 { | |
405 $mock = $this->getMock(array('AnInterface', 'AnotherInterface')); | |
406 $this->assertInstanceOf('AnInterface', $mock); | |
407 $this->assertInstanceOf('AnotherInterface', $mock); | |
408 } | |
409 | |
410 /** | |
411 * @requires PHP 5.4.0 | |
412 */ | |
413 public function testGetMockForTrait() | |
414 { | |
415 $mock = $this->getMockForTrait('AbstractTrait'); | |
416 $mock->expects($this->never())->method('doSomething'); | |
417 | |
418 $parent = get_parent_class($mock); | |
419 $traits = class_uses($parent, false); | |
420 | |
421 $this->assertContains('AbstractTrait', $traits); | |
422 } | |
423 | |
424 public function testClonedMockObjectShouldStillEqualTheOriginal() | |
425 { | |
426 $a = $this->getMock('stdClass'); | |
427 $b = clone $a; | |
428 $this->assertEquals($a, $b); | |
429 } | |
430 | |
431 public function testMockObjectsConstructedIndepentantlyShouldBeEqual() | |
432 { | |
433 $a = $this->getMock('stdClass'); | |
434 $b = $this->getMock('stdClass'); | |
435 $this->assertEquals($a, $b); | |
436 } | |
437 | |
438 public function testMockObjectsConstructedIndepentantlyShouldNotBeTheSame() | |
439 { | |
440 $a = $this->getMock('stdClass'); | |
441 $b = $this->getMock('stdClass'); | |
442 $this->assertNotSame($a, $b); | |
443 } | |
444 | |
445 public function testClonedMockObjectCanBeUsedInPlaceOfOriginalOne() | |
446 { | |
447 $x = $this->getMock('stdClass'); | |
448 $y = clone $x; | |
449 | |
450 $mock = $this->getMock('stdClass', array('foo')); | |
451 $mock->expects($this->once())->method('foo')->with($this->equalTo($x)); | |
452 $mock->foo($y); | |
453 } | |
454 | |
455 public function testClonedMockObjectIsNotIdenticalToOriginalOne() | |
456 { | |
457 $x = $this->getMock('stdClass'); | |
458 $y = clone $x; | |
459 | |
460 $mock = $this->getMock('stdClass', array('foo')); | |
461 $mock->expects($this->once())->method('foo')->with($this->logicalNot($this->identicalTo($x))); | |
462 $mock->foo($y); | |
463 } | |
464 | |
465 public function testObjectMethodCallWithArgumentCloningEnabled() | |
466 { | |
467 $expectedObject = new StdClass; | |
468 | |
469 $mock = $this->getMockBuilder('SomeClass') | |
470 ->setMethods(array('doSomethingElse')) | |
471 ->enableArgumentCloning() | |
472 ->getMock(); | |
473 | |
474 $actualArguments = array(); | |
475 | |
476 $mock->expects($this->any()) | |
477 ->method('doSomethingElse') | |
478 ->will($this->returnCallback(function () use (&$actualArguments) { | |
479 $actualArguments = func_get_args(); | |
480 })); | |
481 | |
482 $mock->doSomethingElse($expectedObject); | |
483 | |
484 $this->assertEquals(1, count($actualArguments)); | |
485 $this->assertEquals($expectedObject, $actualArguments[0]); | |
486 $this->assertNotSame($expectedObject, $actualArguments[0]); | |
487 } | |
488 | |
489 public function testObjectMethodCallWithArgumentCloningDisabled() | |
490 { | |
491 $expectedObject = new StdClass; | |
492 | |
493 $mock = $this->getMockBuilder('SomeClass') | |
494 ->setMethods(array('doSomethingElse')) | |
495 ->disableArgumentCloning() | |
496 ->getMock(); | |
497 | |
498 $actualArguments = array(); | |
499 | |
500 $mock->expects($this->any()) | |
501 ->method('doSomethingElse') | |
502 ->will($this->returnCallback(function () use (&$actualArguments) { | |
503 $actualArguments = func_get_args(); | |
504 })); | |
505 | |
506 $mock->doSomethingElse($expectedObject); | |
507 | |
508 $this->assertEquals(1, count($actualArguments)); | |
509 $this->assertSame($expectedObject, $actualArguments[0]); | |
510 } | |
511 | |
512 public function testArgumentCloningOptionGeneratesUniqueMock() | |
513 { | |
514 $mockWithCloning = $this->getMockBuilder('SomeClass') | |
515 ->setMethods(array('doSomethingElse')) | |
516 ->enableArgumentCloning() | |
517 ->getMock(); | |
518 | |
519 $mockWithoutCloning = $this->getMockBuilder('SomeClass') | |
520 ->setMethods(array('doSomethingElse')) | |
521 ->disableArgumentCloning() | |
522 ->getMock(); | |
523 | |
524 $this->assertNotEquals($mockWithCloning, $mockWithoutCloning); | |
525 } | |
526 | |
527 public function testVerificationOfMethodNameFailsWithoutParameters() | |
528 { | |
529 $mock = $this->getMock('SomeClass', array('right', 'wrong'), array(), '', true, true, true); | |
530 $mock->expects($this->once()) | |
531 ->method('right'); | |
532 | |
533 $mock->wrong(); | |
534 try { | |
535 $mock->__phpunit_verify(); | |
536 $this->fail('Expected exception'); | |
537 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
538 $this->assertSame( | |
539 "Expectation failed for method name is equal to <string:right> when invoked 1 time(s).\n" | |
540 . "Method was expected to be called 1 times, actually called 0 times.\n", | |
541 $e->getMessage() | |
542 ); | |
543 } | |
544 | |
545 $this->resetMockObjects(); | |
546 } | |
547 | |
548 public function testVerificationOfMethodNameFailsWithParameters() | |
549 { | |
550 $mock = $this->getMock('SomeClass', array('right', 'wrong'), array(), '', true, true, true); | |
551 $mock->expects($this->once()) | |
552 ->method('right'); | |
553 | |
554 $mock->wrong(); | |
555 try { | |
556 $mock->__phpunit_verify(); | |
557 $this->fail('Expected exception'); | |
558 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
559 $this->assertSame( | |
560 "Expectation failed for method name is equal to <string:right> when invoked 1 time(s).\n" | |
561 . "Method was expected to be called 1 times, actually called 0 times.\n", | |
562 $e->getMessage() | |
563 ); | |
564 } | |
565 | |
566 $this->resetMockObjects(); | |
567 } | |
568 | |
569 public function testVerificationOfMethodNameFailsWithWrongParameters() | |
570 { | |
571 $mock = $this->getMock('SomeClass', array('right', 'wrong'), array(), '', true, true, true); | |
572 $mock->expects($this->once()) | |
573 ->method('right') | |
574 ->with(array('first', 'second')); | |
575 | |
576 try { | |
577 $mock->right(array('second')); | |
578 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
579 $this->assertSame( | |
580 "Expectation failed for method name is equal to <string:right> when invoked 1 time(s)\n" | |
581 . "Parameter 0 for invocation SomeClass::right(Array (...)) does not match expected value.\n" | |
582 . "Failed asserting that two arrays are equal.", | |
583 $e->getMessage() | |
584 ); | |
585 } | |
586 | |
587 try { | |
588 $mock->__phpunit_verify(); | |
589 $this->fail('Expected exception'); | |
590 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
591 $this->assertSame( | |
592 "Expectation failed for method name is equal to <string:right> when invoked 1 time(s).\n" | |
593 . "Parameter 0 for invocation SomeClass::right(Array (...)) does not match expected value.\n" | |
594 . "Failed asserting that two arrays are equal.\n" | |
595 . "--- Expected\n" | |
596 . "+++ Actual\n" | |
597 . "@@ @@\n" | |
598 . " Array (\n" | |
599 . "- 0 => 'first'\n" | |
600 . "- 1 => 'second'\n" | |
601 . "+ 0 => 'second'\n" | |
602 . " )\n", | |
603 $e->getMessage() | |
604 ); | |
605 } | |
606 | |
607 $this->resetMockObjects(); | |
608 } | |
609 | |
610 public function testVerificationOfNeverFailsWithEmptyParameters() | |
611 { | |
612 $mock = $this->getMock('SomeClass', array('right', 'wrong'), array(), '', true, true, true); | |
613 $mock->expects($this->never()) | |
614 ->method('right') | |
615 ->with(); | |
616 | |
617 try { | |
618 $mock->right(); | |
619 $this->fail('Expected exception'); | |
620 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
621 $this->assertSame( | |
622 'SomeClass::right() was not expected to be called.', | |
623 $e->getMessage() | |
624 ); | |
625 } | |
626 | |
627 $this->resetMockObjects(); | |
628 } | |
629 | |
630 public function testVerificationOfNeverFailsWithAnyParameters() | |
631 { | |
632 $mock = $this->getMock('SomeClass', array('right', 'wrong'), array(), '', true, true, true); | |
633 $mock->expects($this->never()) | |
634 ->method('right') | |
635 ->withAnyParameters(); | |
636 | |
637 try { | |
638 $mock->right(); | |
639 $this->fail('Expected exception'); | |
640 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
641 $this->assertSame( | |
642 'SomeClass::right() was not expected to be called.', | |
643 $e->getMessage() | |
644 ); | |
645 } | |
646 | |
647 $this->resetMockObjects(); | |
648 } | |
649 | |
650 /** | |
651 * @ticket 199 | |
652 */ | |
653 public function testWithAnythingInsteadOfWithAnyParameters() | |
654 { | |
655 $mock = $this->getMock('SomeClass', array('right'), array(), '', true, true, true); | |
656 $mock->expects($this->once()) | |
657 ->method('right') | |
658 ->with($this->anything()); | |
659 | |
660 try { | |
661 $mock->right(); | |
662 $this->fail('Expected exception'); | |
663 } catch (PHPUnit_Framework_ExpectationFailedException $e) { | |
664 $this->assertSame( | |
665 "Expectation failed for method name is equal to <string:right> when invoked 1 time(s)\n" . | |
666 "Parameter count for invocation SomeClass::right() is too low.\n" . | |
667 "To allow 0 or more parameters with any value, omit ->with() or use ->withAnyParameters() instead.", | |
668 $e->getMessage() | |
669 ); | |
670 } | |
671 | |
672 $this->resetMockObjects(); | |
673 } | |
674 | |
675 /** | |
676 * See https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 | |
677 */ | |
678 public function testMockArgumentsPassedByReference() | |
679 { | |
680 $foo = $this->getMockBuilder('MethodCallbackByReference') | |
681 ->setMethods(array('bar')) | |
682 ->disableOriginalConstructor() | |
683 ->disableArgumentCloning() | |
684 ->getMock(); | |
685 | |
686 $foo->expects($this->any()) | |
687 ->method('bar') | |
688 ->will($this->returnCallback(array($foo, 'callback'))); | |
689 | |
690 $a = $b = $c = 0; | |
691 | |
692 $foo->bar($a, $b, $c); | |
693 | |
694 $this->assertEquals(1, $b); | |
695 } | |
696 | |
697 /** | |
698 * See https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 | |
699 */ | |
700 public function testMockArgumentsPassedByReference2() | |
701 { | |
702 $foo = $this->getMockBuilder('MethodCallbackByReference') | |
703 ->disableOriginalConstructor() | |
704 ->disableArgumentCloning() | |
705 ->getMock(); | |
706 | |
707 $foo->expects($this->any()) | |
708 ->method('bar') | |
709 ->will($this->returnCallback( | |
710 function (&$a, &$b, $c) { | |
711 $b = 1; | |
712 } | |
713 )); | |
714 | |
715 $a = $b = $c = 0; | |
716 | |
717 $foo->bar($a, $b, $c); | |
718 | |
719 $this->assertEquals(1, $b); | |
720 } | |
721 | |
722 /** | |
723 * https://github.com/sebastianbergmann/phpunit-mock-objects/issues/116 | |
724 */ | |
725 public function testMockArgumentsPassedByReference3() | |
726 { | |
727 $foo = $this->getMockBuilder('MethodCallbackByReference') | |
728 ->setMethods(array('bar')) | |
729 ->disableOriginalConstructor() | |
730 ->disableArgumentCloning() | |
731 ->getMock(); | |
732 | |
733 $a = new stdClass(); | |
734 $b = $c = 0; | |
735 | |
736 $foo->expects($this->any()) | |
737 ->method('bar') | |
738 ->with($a, $b, $c) | |
739 ->will($this->returnCallback(array($foo, 'callback'))); | |
740 | |
741 $foo->bar($a, $b, $c); | |
742 } | |
743 | |
744 /** | |
745 * https://github.com/sebastianbergmann/phpunit/issues/796 | |
746 */ | |
747 public function testMockArgumentsPassedByReference4() | |
748 { | |
749 $foo = $this->getMockBuilder('MethodCallbackByReference') | |
750 ->setMethods(array('bar')) | |
751 ->disableOriginalConstructor() | |
752 ->disableArgumentCloning() | |
753 ->getMock(); | |
754 | |
755 $a = new stdClass(); | |
756 $b = $c = 0; | |
757 | |
758 $foo->expects($this->any()) | |
759 ->method('bar') | |
760 ->with($this->isInstanceOf("stdClass"), $b, $c) | |
761 ->will($this->returnCallback(array($foo, 'callback'))); | |
762 | |
763 $foo->bar($a, $b, $c); | |
764 } | |
765 | |
766 /** | |
767 * @requires extension soap | |
768 */ | |
769 public function testCreateMockFromWsdl() | |
770 { | |
771 $mock = $this->getMockFromWsdl(__DIR__ . '/_fixture/GoogleSearch.wsdl', 'WsdlMock'); | |
772 $this->assertStringStartsWith( | |
773 'Mock_WsdlMock_', | |
774 get_class($mock) | |
775 ); | |
776 } | |
777 | |
778 /** | |
779 * @requires extension soap | |
780 */ | |
781 public function testCreateNamespacedMockFromWsdl() | |
782 { | |
783 $mock = $this->getMockFromWsdl(__DIR__ . '/_fixture/GoogleSearch.wsdl', 'My\\Space\\WsdlMock'); | |
784 $this->assertStringStartsWith( | |
785 'Mock_WsdlMock_', | |
786 get_class($mock) | |
787 ); | |
788 } | |
789 | |
790 /** | |
791 * @requires extension soap | |
792 */ | |
793 public function testCreateTwoMocksOfOneWsdlFile() | |
794 { | |
795 $mock = $this->getMockFromWsdl(__DIR__ . '/_fixture/GoogleSearch.wsdl'); | |
796 $mock = $this->getMockFromWsdl(__DIR__ . '/_fixture/GoogleSearch.wsdl'); | |
797 } | |
798 | |
799 /** | |
800 * @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/156 | |
801 * @ticket 156 | |
802 */ | |
803 public function testInterfaceWithStaticMethodCanBeStubbed() | |
804 { | |
805 $this->assertInstanceOf( | |
806 'InterfaceWithStaticMethod', | |
807 $this->getMock('InterfaceWithStaticMethod') | |
808 ); | |
809 } | |
810 | |
811 /** | |
812 * @expectedException PHPUnit_Framework_MockObject_BadMethodCallException | |
813 */ | |
814 public function testInvokingStubbedStaticMethodRaisesException() | |
815 { | |
816 $mock = $this->getMock('ClassWithStaticMethod'); | |
817 $mock->staticMethod(); | |
818 } | |
819 | |
820 /** | |
821 * @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/171 | |
822 * @ticket 171 | |
823 */ | |
824 public function testStubForClassThatImplementsSerializableCanBeCreatedWithoutInvokingTheConstructor() | |
825 { | |
826 $this->assertInstanceOf( | |
827 'ClassThatImplementsSerializable', | |
828 $this->getMockBuilder('ClassThatImplementsSerializable') | |
829 ->disableOriginalConstructor() | |
830 ->getMock() | |
831 ); | |
832 } | |
833 | |
834 private function resetMockObjects() | |
835 { | |
836 $refl = new ReflectionObject($this); | |
837 $refl = $refl->getParentClass(); | |
838 $prop = $refl->getProperty('mockObjects'); | |
839 $prop->setAccessible(true); | |
840 $prop->setValue($this, array()); | |
841 } | |
842 } |