Skip to content

Commit ab3a874

Browse files
committed
Don't add dynamic property __mocked to mocked object
Because setting dynamic properties is deprecated since PHP 8.2
1 parent 69868e1 commit ab3a874

File tree

4 files changed

+20
-34
lines changed

4 files changed

+20
-34
lines changed

composer.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,8 @@
1515
},
1616
"require-dev": {
1717
"consolidation/robo": "^3.0"
18+
},
19+
"conflict": {
20+
"codeception/codeception": "<5.0.6"
1821
}
1922
}

src/Stub.php

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,6 @@ public static function make($class, array $params = [], $testCase = false)
9292

9393
self::bindParameters($mock, $params);
9494

95-
return self::markAsMock($mock, $reflection);
96-
}
97-
98-
/**
99-
* Set __mock flag, if at all possible
100-
*/
101-
private static function markAsMock(object $mock, ReflectionClass $reflection): object
102-
{
103-
if (!$reflection->hasMethod('__set')) {
104-
$mock->__mocked = $reflection->getName();
105-
}
10695
return $mock;
10796
}
10897

@@ -169,11 +158,11 @@ public static function factory($class, int $num = 1, array $params = []): array
169158
*/
170159
public static function makeEmptyExcept($class, string $method, array $params = [], $testCase = false)
171160
{
172-
[$class, $reflectionClass, $methods] = self::createEmpty($class, $method);
161+
[$class, $methods] = self::createEmpty($class, $method);
173162
$mock = self::generateMock($class, $methods, [], '', false, $testCase);
174163
self::bindParameters($mock, $params);
175164

176-
return self::markAsMock($mock, $reflectionClass);
165+
return $mock;
177166
}
178167

179168
/**
@@ -223,17 +212,14 @@ public static function makeEmptyExcept($class, string $method, array $params = [
223212
public static function makeEmpty($class, array $params = [], $testCase = false)
224213
{
225214
$class = self::getClassname($class);
226-
$reflection = new ReflectionClass($class);
227-
228-
$methods = get_class_methods($class);
229215
$methods = array_filter(
230-
$methods,
216+
get_class_methods($class),
231217
fn($i) => !in_array($i, Stub::$magicMethods)
232218
);
233219
$mock = self::generateMock($class, $methods, [], '', false, $testCase);
234220
self::bindParameters($mock, $params);
235221

236-
return self::markAsMock($mock, $reflection);
222+
return $mock;
237223
}
238224

239225
/**
@@ -307,7 +293,7 @@ public static function construct($class, array $constructorParams = [], array $p
307293
$mock = self::generateMock($class, $arguments, $constructorParams, $testCase);
308294
self::bindParameters($mock, $params);
309295

310-
return self::markAsMock($mock, $reflection);
296+
return $mock;
311297
}
312298

313299
/**
@@ -354,22 +340,18 @@ public static function construct($class, array $constructorParams = [], array $p
354340
* @param bool|PHPUnitTestCase $testCase
355341
*
356342
* @return PHPUnitMockObject&RealInstanceType
357-
* @throws ReflectionException
358343
*/
359344
public static function constructEmpty($class, array $constructorParams = [], array $params = [], $testCase = false)
360345
{
361346
$class = self::getClassname($class);
362-
$reflection = new ReflectionClass($class);
363-
364-
$methods = get_class_methods($class);
365347
$methods = array_filter(
366-
$methods,
348+
get_class_methods($class),
367349
fn($i) => !in_array($i, Stub::$magicMethods)
368350
);
369351
$mock = self::generateMock($class, $methods, $constructorParams, $testCase);
370352
self::bindParameters($mock, $params);
371353

372-
return self::markAsMock($mock, $reflection);
354+
return $mock;
373355
}
374356

375357
/**
@@ -423,11 +405,11 @@ public static function constructEmptyExcept(
423405
array $params = [],
424406
$testCase = false
425407
) {
426-
[$class, $reflectionClass, $methods] = self::createEmpty($class, $method);
408+
[$class, $methods] = self::createEmpty($class, $method);
427409
$mock = self::generateMock($class, $methods, $constructorParams, $testCase);
428410
self::bindParameters($mock, $params);
429411

430-
return self::markAsMock($mock, $reflectionClass);
412+
return $mock;
431413
}
432414

433415
private static function generateMock()
@@ -633,6 +615,6 @@ private static function createEmpty($class, string $method): array
633615
);
634616

635617
$methods = count($methods) ? $methods : null;
636-
return [$class, $reflectionClass, $methods];
618+
return [$class, $methods];
637619
}
638620
}

src/Test/Feature/Stub.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ public function constructEmpty($class, array $constructorParams = [], array $par
290290
* @template RealInstanceType of object
291291
* @param class-string<RealInstanceType>|RealInstanceType|callable(): class-string<RealInstanceType> $class - A class to be mocked
292292
* @return MockObject&RealInstanceType
293+
* @throws \ReflectionException
293294
*/
294295
public function constructEmptyExcept($class, string $method, array $constructorParams = [], array $params = [])
295296
{

tests/StubTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,42 +160,42 @@ public function testStubsFromObject()
160160
$dummy
161161
);
162162
$dummy = Stub::make(new DummyOverloadableClass());
163-
$this->assertObjectHasProperty('__mocked', $dummy);
163+
$this->assertSame(DummyOverloadableClass::class, get_parent_class($dummy));
164164
$dummy = Stub::makeEmpty(new DummyClass());
165165
$this->assertInstanceOf(
166166
MockObject::class,
167167
$dummy
168168
);
169169
$dummy = Stub::makeEmpty(new DummyOverloadableClass());
170-
$this->assertObjectHasProperty('__mocked', $dummy);
170+
$this->assertSame(DummyOverloadableClass::class, get_parent_class($dummy));
171171
$dummy = Stub::makeEmptyExcept(new DummyClass(), 'helloWorld');
172172
$this->assertInstanceOf(
173173
MockObject::class,
174174
$dummy
175175
);
176176
$dummy = Stub::makeEmptyExcept(new DummyOverloadableClass(), 'helloWorld');
177-
$this->assertObjectHasProperty('__mocked', $dummy);
177+
$this->assertSame(DummyOverloadableClass::class, get_parent_class($dummy));
178178
$dummy = Stub::construct(new DummyClass());
179179
$this->assertInstanceOf(
180180
MockObject::class,
181181
$dummy
182182
);
183183
$dummy = Stub::construct(new DummyOverloadableClass());
184-
$this->assertObjectHasProperty('__mocked', $dummy);
184+
$this->assertSame(DummyOverloadableClass::class, get_parent_class($dummy));
185185
$dummy = Stub::constructEmpty(new DummyClass());
186186
$this->assertInstanceOf(
187187
MockObject::class,
188188
$dummy
189189
);
190190
$dummy = Stub::constructEmpty(new DummyOverloadableClass());
191-
$this->assertObjectHasProperty('__mocked', $dummy);
191+
$this->assertSame(DummyOverloadableClass::class, get_parent_class($dummy));
192192
$dummy = Stub::constructEmptyExcept(new DummyClass(), 'helloWorld');
193193
$this->assertInstanceOf(
194194
MockObject::class,
195195
$dummy
196196
);
197197
$dummy = Stub::constructEmptyExcept(new DummyOverloadableClass(), 'helloWorld');
198-
$this->assertObjectHasProperty('__mocked', $dummy);
198+
$this->assertSame(DummyOverloadableClass::class, get_parent_class($dummy));
199199
}
200200

201201
protected function assertMethodReplaced($dummy)

0 commit comments

Comments
 (0)