在单元测试中Symfony实体id为空

问题描述 投票:0回答:1

嗨,我有一个问题,我有一个脚本,有这样的。

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 而非 int (该 UserResponse() 希望第一个参数是 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' => '[email protected]'
php doctrine phpunit symfony4
1个回答
0
投票

从你的实体的id只有在你坚持和刷新的情况下才会自动生成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);
}
© www.soinside.com 2019 - 2024. All rights reserved.