Chris@0
|
1 <?php
|
Chris@0
|
2 /*
|
Chris@14
|
3 * This file is part of the phpunit-mock-objects package.
|
Chris@0
|
4 *
|
Chris@0
|
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
|
Chris@0
|
6 *
|
Chris@0
|
7 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
8 * file that was distributed with this source code.
|
Chris@0
|
9 */
|
Chris@0
|
10
|
Chris@14
|
11 use PHPUnit\Framework\TestCase;
|
Chris@14
|
12 use PHPUnit\Framework\MockObject\MockBuilder;
|
Chris@14
|
13
|
Chris@14
|
14 class MockBuilderTest extends TestCase
|
Chris@0
|
15 {
|
Chris@0
|
16 public function testMockBuilderRequiresClassName()
|
Chris@0
|
17 {
|
Chris@14
|
18 $mock = $this->getMockBuilder(Mockable::class)->getMock();
|
Chris@14
|
19
|
Chris@0
|
20 $this->assertTrue($mock instanceof Mockable);
|
Chris@0
|
21 }
|
Chris@0
|
22
|
Chris@0
|
23 public function testByDefaultMocksAllMethods()
|
Chris@0
|
24 {
|
Chris@14
|
25 $mock = $this->getMockBuilder(Mockable::class)->getMock();
|
Chris@14
|
26
|
Chris@0
|
27 $this->assertNull($mock->mockableMethod());
|
Chris@0
|
28 $this->assertNull($mock->anotherMockableMethod());
|
Chris@0
|
29 }
|
Chris@0
|
30
|
Chris@0
|
31 public function testMethodsToMockCanBeSpecified()
|
Chris@0
|
32 {
|
Chris@14
|
33 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
34 ->setMethods(['mockableMethod'])
|
Chris@14
|
35 ->getMock();
|
Chris@14
|
36
|
Chris@0
|
37 $this->assertNull($mock->mockableMethod());
|
Chris@0
|
38 $this->assertTrue($mock->anotherMockableMethod());
|
Chris@0
|
39 }
|
Chris@0
|
40
|
Chris@14
|
41 public function testMethodExceptionsToMockCanBeSpecified()
|
Chris@14
|
42 {
|
Chris@14
|
43 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
44 ->setMethodsExcept(['mockableMethod'])
|
Chris@14
|
45 ->getMock();
|
Chris@14
|
46
|
Chris@14
|
47 $this->assertTrue($mock->mockableMethod());
|
Chris@14
|
48 $this->assertNull($mock->anotherMockableMethod());
|
Chris@14
|
49 }
|
Chris@14
|
50
|
Chris@14
|
51 public function testEmptyMethodExceptionsToMockCanBeSpecified()
|
Chris@14
|
52 {
|
Chris@14
|
53 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
54 ->setMethodsExcept()
|
Chris@14
|
55 ->getMock();
|
Chris@14
|
56
|
Chris@14
|
57 $this->assertNull($mock->mockableMethod());
|
Chris@14
|
58 $this->assertNull($mock->anotherMockableMethod());
|
Chris@14
|
59 }
|
Chris@14
|
60
|
Chris@0
|
61 public function testByDefaultDoesNotPassArgumentsToTheConstructor()
|
Chris@0
|
62 {
|
Chris@14
|
63 $mock = $this->getMockBuilder(Mockable::class)->getMock();
|
Chris@14
|
64
|
Chris@14
|
65 $this->assertEquals([null, null], $mock->constructorArgs);
|
Chris@0
|
66 }
|
Chris@0
|
67
|
Chris@0
|
68 public function testMockClassNameCanBeSpecified()
|
Chris@0
|
69 {
|
Chris@14
|
70 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
71 ->setMockClassName('ACustomClassName')
|
Chris@14
|
72 ->getMock();
|
Chris@14
|
73
|
Chris@0
|
74 $this->assertTrue($mock instanceof ACustomClassName);
|
Chris@0
|
75 }
|
Chris@0
|
76
|
Chris@0
|
77 public function testConstructorArgumentsCanBeSpecified()
|
Chris@0
|
78 {
|
Chris@14
|
79 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
80 ->setConstructorArgs([23, 42])
|
Chris@14
|
81 ->getMock();
|
Chris@14
|
82
|
Chris@14
|
83 $this->assertEquals([23, 42], $mock->constructorArgs);
|
Chris@0
|
84 }
|
Chris@0
|
85
|
Chris@0
|
86 public function testOriginalConstructorCanBeDisabled()
|
Chris@0
|
87 {
|
Chris@14
|
88 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
89 ->disableOriginalConstructor()
|
Chris@14
|
90 ->getMock();
|
Chris@14
|
91
|
Chris@0
|
92 $this->assertNull($mock->constructorArgs);
|
Chris@0
|
93 }
|
Chris@0
|
94
|
Chris@0
|
95 public function testByDefaultOriginalCloneIsPreserved()
|
Chris@0
|
96 {
|
Chris@14
|
97 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
98 ->getMock();
|
Chris@14
|
99
|
Chris@0
|
100 $cloned = clone $mock;
|
Chris@14
|
101
|
Chris@0
|
102 $this->assertTrue($cloned->cloned);
|
Chris@0
|
103 }
|
Chris@0
|
104
|
Chris@0
|
105 public function testOriginalCloneCanBeDisabled()
|
Chris@0
|
106 {
|
Chris@14
|
107 $mock = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
108 ->disableOriginalClone()
|
Chris@14
|
109 ->getMock();
|
Chris@14
|
110
|
Chris@0
|
111 $mock->cloned = false;
|
Chris@14
|
112 $cloned = clone $mock;
|
Chris@14
|
113
|
Chris@0
|
114 $this->assertFalse($cloned->cloned);
|
Chris@0
|
115 }
|
Chris@0
|
116
|
Chris@0
|
117 public function testProvidesAFluentInterface()
|
Chris@0
|
118 {
|
Chris@14
|
119 $spec = $this->getMockBuilder(Mockable::class)
|
Chris@14
|
120 ->setMethods(['mockableMethod'])
|
Chris@14
|
121 ->setConstructorArgs([])
|
Chris@0
|
122 ->setMockClassName('DummyClassName')
|
Chris@0
|
123 ->disableOriginalConstructor()
|
Chris@0
|
124 ->disableOriginalClone()
|
Chris@0
|
125 ->disableAutoload();
|
Chris@14
|
126
|
Chris@14
|
127 $this->assertTrue($spec instanceof MockBuilder);
|
Chris@0
|
128 }
|
Chris@0
|
129 }
|