嗨,我有一个问题,我有一个脚本,有这样的。
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]'
从你的实体的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);
}