【问题标题】:Symfony Entity id is null in Unit TestSymfony 实体 id 在单元测试中为空
【发布时间】:2020-08-31 05:15:26
【问题描述】:

您好,我有一个问题,我有一个包含这个的脚本

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 而不是@987654327 @)

当然,当我在单元测试中创建一个新的 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'

【问题讨论】:

  • 该 ID 设置在哪里?在给定的代码中,你不要操纵它

标签: php doctrine phpunit symfony4


【解决方案1】:

只有在持久化和刷新的情况下,您的实体的 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2018-06-22
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多