首页 > 解决方案 > Symfony 实体 id 在单元测试中为空

问题描述

嗨我有一个问题我有一个脚本有这个

public function add(Request $request): UserResponse
{
    $user = new User();

    /** @var $request UserRequest */
    $user->setName($request->getName());
    $user->setEmail($request->getEmail());

    $this->dataService->addUpdate($user);

    return new UserResponse(
        $user->getId(),
        $user->getName(),
        $user->getEmail()
    );
}

现在我想对这个函数进行单元测试,但它给了我一个错误而$user->getId()不是null一个intUserResponse()希望第一个参数是int而不是null

但是当然,当我在单元测试中创建一个新User()对象时,它没有 ID,这是由 EntityManager 设置的(对我来说,魔术)

我已经尝试过做一些事情

$reflectionClass = new ReflectionClass(get_class($user));
$idProperty = $reflectionClass->getProperty('id');
$idProperty->setAccessible(true);
$idProperty->setValue($user, 1);

但这无济于事,任何人都知道如何解决此错误:

1) App\Tests\Service\UserServiceTest::addTest
Expectation failed for method name is equal to 'addUpdate' when invoked 1 time(s)
Parameter 0 for invocation App\Service\DataService::addUpdate(App\Entity\User Object (...)): void does not match expected value.
Failed asserting that two objects are equal.
--- Expected
+++ Actual
@@ @@
 App\Entity\User Object (
-    'id' => 1
+    'id' => null
     'name' => 'test'
     'identifier' => null
     'email' => 'test@test.nl'

标签: phpdoctrinephpunitsymfony4

解决方案


仅当您坚持并刷新时,您的实体的 id 才会自动生成。

public function add(Request $request, EntityManagerInterface $em): UserResponse
{
    $user = new User();

    /** @var $request UserRequest */
    $user->setName($request->getName());
    $user->setEmail($request->getEmail());

    $em->persist($user);
    $em->flush();

    dd($user->getId);
}

推荐阅读