Chris@0
|
1 <?php
|
Chris@0
|
2 class Framework_MockObject_GeneratorTest extends PHPUnit_Framework_TestCase
|
Chris@0
|
3 {
|
Chris@0
|
4 /**
|
Chris@0
|
5 * @var PHPUnit_Framework_MockObject_Generator
|
Chris@0
|
6 */
|
Chris@0
|
7 protected $generator;
|
Chris@0
|
8
|
Chris@0
|
9 protected function setUp()
|
Chris@0
|
10 {
|
Chris@0
|
11 $this->generator = new PHPUnit_Framework_MockObject_Generator;
|
Chris@0
|
12 }
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * @covers PHPUnit_Framework_MockObject_Generator::getMock
|
Chris@0
|
16 * @expectedException PHPUnit_Framework_Exception
|
Chris@0
|
17 */
|
Chris@0
|
18 public function testGetMockFailsWhenInvalidFunctionNameIsPassedInAsAFunctionToMock()
|
Chris@0
|
19 {
|
Chris@0
|
20 $this->generator->getMock('StdClass', array(0));
|
Chris@0
|
21 }
|
Chris@0
|
22
|
Chris@0
|
23 /**
|
Chris@0
|
24 * @covers PHPUnit_Framework_MockObject_Generator::getMock
|
Chris@0
|
25 */
|
Chris@0
|
26 public function testGetMockCanCreateNonExistingFunctions()
|
Chris@0
|
27 {
|
Chris@0
|
28 $mock = $this->generator->getMock('StdClass', array('testFunction'));
|
Chris@0
|
29 $this->assertTrue(method_exists($mock, 'testFunction'));
|
Chris@0
|
30 }
|
Chris@0
|
31
|
Chris@0
|
32 /**
|
Chris@0
|
33 * @covers PHPUnit_Framework_MockObject_Generator::getMock
|
Chris@0
|
34 * @expectedException PHPUnit_Framework_MockObject_RuntimeException
|
Chris@0
|
35 * @expectedExceptionMessage duplicates: "foo, foo"
|
Chris@0
|
36 */
|
Chris@0
|
37 public function testGetMockGeneratorFails()
|
Chris@0
|
38 {
|
Chris@0
|
39 $mock = $this->generator->getMock('StdClass', array('foo', 'foo'));
|
Chris@0
|
40 }
|
Chris@0
|
41
|
Chris@0
|
42 /**
|
Chris@0
|
43 * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
|
Chris@0
|
44 */
|
Chris@0
|
45 public function testGetMockForAbstractClassDoesNotFailWhenFakingInterfaces()
|
Chris@0
|
46 {
|
Chris@0
|
47 $mock = $this->generator->getMockForAbstractClass('Countable');
|
Chris@0
|
48 $this->assertTrue(method_exists($mock, 'count'));
|
Chris@0
|
49 }
|
Chris@0
|
50
|
Chris@0
|
51 /**
|
Chris@0
|
52 * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
|
Chris@0
|
53 */
|
Chris@0
|
54 public function testGetMockForAbstractClassStubbingAbstractClass()
|
Chris@0
|
55 {
|
Chris@0
|
56 $mock = $this->generator->getMockForAbstractClass('AbstractMockTestClass');
|
Chris@0
|
57 $this->assertTrue(method_exists($mock, 'doSomething'));
|
Chris@0
|
58 }
|
Chris@0
|
59
|
Chris@0
|
60 /**
|
Chris@0
|
61 * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
|
Chris@0
|
62 */
|
Chris@0
|
63 public function testGetMockForAbstractClassWithNonExistentMethods()
|
Chris@0
|
64 {
|
Chris@0
|
65 $mock = $this->generator->getMockForAbstractClass(
|
Chris@0
|
66 'AbstractMockTestClass',
|
Chris@0
|
67 array(),
|
Chris@0
|
68 '',
|
Chris@0
|
69 true,
|
Chris@0
|
70 true,
|
Chris@0
|
71 true,
|
Chris@0
|
72 array('nonexistentMethod')
|
Chris@0
|
73 );
|
Chris@0
|
74
|
Chris@0
|
75 $this->assertTrue(method_exists($mock, 'nonexistentMethod'));
|
Chris@0
|
76 $this->assertTrue(method_exists($mock, 'doSomething'));
|
Chris@0
|
77 }
|
Chris@0
|
78
|
Chris@0
|
79 /**
|
Chris@0
|
80 * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
|
Chris@0
|
81 */
|
Chris@0
|
82 public function testGetMockForAbstractClassShouldCreateStubsOnlyForAbstractMethodWhenNoMethodsWereInformed()
|
Chris@0
|
83 {
|
Chris@0
|
84 $mock = $this->generator->getMockForAbstractClass('AbstractMockTestClass');
|
Chris@0
|
85
|
Chris@0
|
86 $mock->expects($this->any())
|
Chris@0
|
87 ->method('doSomething')
|
Chris@0
|
88 ->willReturn('testing');
|
Chris@0
|
89
|
Chris@0
|
90 $this->assertEquals('testing', $mock->doSomething());
|
Chris@0
|
91 $this->assertEquals(1, $mock->returnAnything());
|
Chris@0
|
92 }
|
Chris@0
|
93
|
Chris@0
|
94 /**
|
Chris@0
|
95 * @dataProvider getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider
|
Chris@0
|
96 * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
|
Chris@0
|
97 * @expectedException PHPUnit_Framework_Exception
|
Chris@0
|
98 */
|
Chris@0
|
99 public function testGetMockForAbstractClassExpectingInvalidArgumentException($className, $mockClassName)
|
Chris@0
|
100 {
|
Chris@0
|
101 $mock = $this->generator->getMockForAbstractClass($className, array(), $mockClassName);
|
Chris@0
|
102 }
|
Chris@0
|
103
|
Chris@0
|
104 /**
|
Chris@0
|
105 * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
|
Chris@0
|
106 * @expectedException PHPUnit_Framework_MockObject_RuntimeException
|
Chris@0
|
107 */
|
Chris@0
|
108 public function testGetMockForAbstractClassAbstractClassDoesNotExist()
|
Chris@0
|
109 {
|
Chris@0
|
110 $mock = $this->generator->getMockForAbstractClass('Tux');
|
Chris@0
|
111 }
|
Chris@0
|
112
|
Chris@0
|
113 /**
|
Chris@0
|
114 * Dataprovider for test "testGetMockForAbstractClassExpectingInvalidArgumentException"
|
Chris@0
|
115 */
|
Chris@0
|
116 public static function getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider()
|
Chris@0
|
117 {
|
Chris@0
|
118 return array(
|
Chris@0
|
119 'className not a string' => array(array(), ''),
|
Chris@0
|
120 'mockClassName not a string' => array('Countable', new StdClass),
|
Chris@0
|
121 );
|
Chris@0
|
122 }
|
Chris@0
|
123
|
Chris@0
|
124 /**
|
Chris@0
|
125 * @covers PHPUnit_Framework_MockObject_Generator::getMockForTrait
|
Chris@0
|
126 * @requires PHP 5.4.0
|
Chris@0
|
127 */
|
Chris@0
|
128 public function testGetMockForTraitWithNonExistentMethodsAndNonAbstractMethods()
|
Chris@0
|
129 {
|
Chris@0
|
130 $mock = $this->generator->getMockForTrait(
|
Chris@0
|
131 'AbstractTrait',
|
Chris@0
|
132 array(),
|
Chris@0
|
133 '',
|
Chris@0
|
134 true,
|
Chris@0
|
135 true,
|
Chris@0
|
136 true,
|
Chris@0
|
137 array('nonexistentMethod')
|
Chris@0
|
138 );
|
Chris@0
|
139
|
Chris@0
|
140 $this->assertTrue(method_exists($mock, 'nonexistentMethod'));
|
Chris@0
|
141 $this->assertTrue(method_exists($mock, 'doSomething'));
|
Chris@0
|
142 $this->assertTrue($mock->mockableMethod());
|
Chris@0
|
143 $this->assertTrue($mock->anotherMockableMethod());
|
Chris@0
|
144 }
|
Chris@0
|
145
|
Chris@0
|
146 /**
|
Chris@0
|
147 * @covers PHPUnit_Framework_MockObject_Generator::getMockForTrait
|
Chris@0
|
148 * @requires PHP 5.4.0
|
Chris@0
|
149 */
|
Chris@0
|
150 public function testGetMockForTraitStubbingAbstractMethod()
|
Chris@0
|
151 {
|
Chris@0
|
152 $mock = $this->generator->getMockForTrait('AbstractTrait');
|
Chris@0
|
153 $this->assertTrue(method_exists($mock, 'doSomething'));
|
Chris@0
|
154 }
|
Chris@0
|
155
|
Chris@0
|
156 /**
|
Chris@0
|
157 * @requires PHP 5.4.0
|
Chris@0
|
158 */
|
Chris@0
|
159 public function testGetMockForSingletonWithReflectionSuccess()
|
Chris@0
|
160 {
|
Chris@0
|
161 // Probably, this should be moved to tests/autoload.php
|
Chris@0
|
162 require_once __DIR__ . '/_fixture/SingletonClass.php';
|
Chris@0
|
163
|
Chris@0
|
164 $mock = $this->generator->getMock('SingletonClass', array('doSomething'), array(), '', false);
|
Chris@0
|
165 $this->assertInstanceOf('SingletonClass', $mock);
|
Chris@0
|
166 }
|
Chris@0
|
167
|
Chris@0
|
168 /**
|
Chris@0
|
169 * Same as "testGetMockForSingletonWithReflectionSuccess", but we expect
|
Chris@0
|
170 * warning for PHP < 5.4.0 since PHPUnit will try to execute private __wakeup
|
Chris@0
|
171 * on unserialize
|
Chris@0
|
172 */
|
Chris@0
|
173 public function testGetMockForSingletonWithUnserializeFail()
|
Chris@0
|
174 {
|
Chris@0
|
175 if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
|
Chris@0
|
176 $this->markTestSkipped('Only for PHP < 5.4.0');
|
Chris@0
|
177 }
|
Chris@0
|
178
|
Chris@0
|
179 $this->setExpectedException('PHPUnit_Framework_MockObject_RuntimeException');
|
Chris@0
|
180
|
Chris@0
|
181 // Probably, this should be moved to tests/autoload.php
|
Chris@0
|
182 require_once __DIR__ . '/_fixture/SingletonClass.php';
|
Chris@0
|
183
|
Chris@0
|
184 $mock = $this->generator->getMock('SingletonClass', array('doSomething'), array(), '', false);
|
Chris@0
|
185 }
|
Chris@0
|
186
|
Chris@0
|
187 /**
|
Chris@0
|
188 * ReflectionClass::getMethods for SoapClient on PHP 5.3 produces PHP Fatal Error
|
Chris@0
|
189 * @runInSeparateProcess
|
Chris@0
|
190 */
|
Chris@0
|
191 public function testGetMockForSoapClientReflectionMethodsDuplication()
|
Chris@0
|
192 {
|
Chris@0
|
193 if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
|
Chris@0
|
194 $this->markTestSkipped('Only for PHP < 5.4.0');
|
Chris@0
|
195 }
|
Chris@0
|
196
|
Chris@0
|
197 $mock = $this->generator->getMock('SoapClient', array(), array(), '', false);
|
Chris@0
|
198 $this->assertInstanceOf('SoapClient', $mock);
|
Chris@0
|
199 }
|
Chris@0
|
200 }
|