Skip to content

Commit ee919d6

Browse files
authored
Merge pull request #12030 from greg0ire/test-w-lazy-o
Rework tests and benchmarks to work with lazy objects
2 parents 04c3906 + ed543a2 commit ee919d6

File tree

3 files changed

+22
-28
lines changed

3 files changed

+22
-28
lines changed

tests/Performance/LazyLoading/ProxyInitializationTimeBench.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Doctrine\Performance\LazyLoading;
66

7+
use Doctrine\ORM\EntityManager;
78
use Doctrine\ORM\Proxy\InternalProxy as Proxy;
89
use Doctrine\Performance\EntityManagerFactory;
910
use Doctrine\Performance\Mock\NonProxyLoadingEntityManager;
@@ -25,9 +26,11 @@ final class ProxyInitializationTimeBench
2526
/** @var Proxy[] */
2627
private array|null $initializedEmployees = null;
2728

29+
private EntityManager $em;
30+
2831
public function init(): void
2932
{
30-
$proxyFactory = (new NonProxyLoadingEntityManager(EntityManagerFactory::getEntityManager([])))
33+
$proxyFactory = (new NonProxyLoadingEntityManager($this->em = EntityManagerFactory::getEntityManager([])))
3134
->getProxyFactory();
3235

3336
for ($i = 0; $i < 10000; ++$i) {
@@ -36,36 +39,36 @@ public function init(): void
3639
$this->initializedUsers[$i] = $proxyFactory->getProxy(CmsUser::class, ['id' => $i]);
3740
$this->initializedEmployees[$i] = $proxyFactory->getProxy(CmsEmployee::class, ['id' => $i]);
3841

39-
$this->initializedUsers[$i]->__load();
40-
$this->initializedEmployees[$i]->__load();
42+
$this->em->getUnitOfWork()->initializeObject($this->initializedUsers[$i]);
43+
$this->em->getUnitOfWork()->initializeObject($this->initializedEmployees[$i]);
4144
}
4245
}
4346

4447
public function benchCmsUserInitialization(): void
4548
{
4649
foreach ($this->cmsUsers as $proxy) {
47-
$proxy->__load();
50+
$this->em->getUnitOfWork()->initializeObject($proxy);
4851
}
4952
}
5053

5154
public function benchCmsEmployeeInitialization(): void
5255
{
5356
foreach ($this->cmsEmployees as $proxy) {
54-
$proxy->__load();
57+
$this->em->getUnitOfWork()->initializeObject($proxy);
5558
}
5659
}
5760

5861
public function benchInitializationOfAlreadyInitializedCmsUsers(): void
5962
{
6063
foreach ($this->initializedUsers as $proxy) {
61-
$proxy->__load();
64+
$this->em->getUnitOfWork()->initializeObject($proxy);
6265
}
6366
}
6467

6568
public function benchInitializationOfAlreadyInitializedCmsEmployees(): void
6669
{
6770
foreach ($this->initializedEmployees as $proxy) {
68-
$proxy->__load();
71+
$this->em->getUnitOfWork()->initializeObject($proxy);
6972
}
7073
}
7174
}

tests/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
use Doctrine\Tests\OrmFunctionalTestCase;
1515
use Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser as CmsUserProxy;
1616

17-
use function assert;
18-
1917
/**
2018
* Test that Doctrine ORM correctly works with proxy instances exactly like with ordinary Entities
2119
*
@@ -34,10 +32,6 @@ protected function setUp(): void
3432
{
3533
parent::setUp();
3634

37-
if ($this->_em->getConfiguration()->isNativeLazyObjectsEnabled()) {
38-
self::markTestSkipped('This test is not applicable when lazy proxy is enabled.');
39-
}
40-
4135
$this->createSchemaForModels(
4236
CmsUser::class,
4337
CmsTag::class,
@@ -83,8 +77,7 @@ public function testEntityWithIdentifier(): void
8377
{
8478
$userId = $this->user->getId();
8579
$uninitializedProxy = $this->_em->getReference(CmsUser::class, $userId);
86-
assert($uninitializedProxy instanceof CmsUserProxy);
87-
self::assertInstanceOf(CmsUserProxy::class, $uninitializedProxy);
80+
$this->assertTrue($this->isUninitializedObject($uninitializedProxy));
8881

8982
$this->_em->persist($uninitializedProxy);
9083
$this->_em->flush();
@@ -116,6 +109,10 @@ public function testProxyAsDqlParameterPersist(): void
116109
*/
117110
public function testFindWithProxyName(): void
118111
{
112+
if ($this->_em->getConfiguration()->isNativeLazyObjectsEnabled()) {
113+
self::markTestSkipped('There is no such thing as a proxy class name when native lazy objects are enabled.');
114+
}
115+
119116
$result = $this->_em->find(CmsUserProxy::class, $this->user->getId());
120117
self::assertSame($this->user->getId(), $result->getId());
121118
$this->_em->clear();

tests/Tests/ORM/Functional/Ticket/GH10808Test.php

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
use Doctrine\ORM\UnitOfWork;
1515
use Doctrine\Tests\OrmFunctionalTestCase;
1616
use PHPUnit\Framework\Attributes\Group;
17-
18-
use function get_class;
17+
use ReflectionClass;
1918

2019
#[Group('GH10808')]
2120
class GH10808Test extends OrmFunctionalTestCase
@@ -32,10 +31,6 @@ protected function setUp(): void
3231

3332
public function testDQLDeferredEagerLoad(): void
3433
{
35-
if ($this->_em->getConfiguration()->isNativeLazyObjectsEnabled()) {
36-
self::markTestSkipped('Test requires lazy loading to be disabled');
37-
}
38-
3934
$appointment = new GH10808Appointment();
4035

4136
$this->_em->persist($appointment);
@@ -55,14 +50,13 @@ public function testDQLDeferredEagerLoad(): void
5550

5651
$eagerLoadResult = $query->setHint(UnitOfWork::HINT_DEFEREAGERLOAD, false)->getSingleResult();
5752

58-
self::assertNotEquals(
59-
GH10808AppointmentChild::class,
60-
get_class($deferredLoadResult->child),
61-
'$deferredLoadResult->child should be a proxy',
53+
$reflector = new ReflectionClass(GH10808AppointmentChild::class);
54+
self::assertFalse(
55+
$this->isUninitializedObject($deferredLoadResult->child),
56+
'$deferredLoadResult->child should be a native lazy object',
6257
);
63-
self::assertEquals(
64-
GH10808AppointmentChild::class,
65-
get_class($eagerLoadResult->child),
58+
self::assertFalse(
59+
$this->isUninitializedObject($deferredLoadResult->child),
6660
'$eagerLoadResult->child should not be a proxy',
6761
);
6862
}

0 commit comments

Comments
 (0)