在同时访问数据库的Symfony 4中测试服务的正确方法是什么?
我是Symfony4的新手(在为Symfony2开发之前),我想为Service编写第一个测试。
此服务通过数据库中的实体/原则/ ORM和我的每个方法编写,我想测试是否触发了数据库保存。
在Symfony 2中,当我使用KernelTestCase而不是PHPUnit_Framework_TestCase时,就是这种情况,因为嘲笑EntityManager麻烦很多,而且我通常也想在测试数据库中检查结果。
Symfony 4的所有示例仅提及用于测试命令的KernelTestCase。
我的课:
class UserPropertyService implements UserPropertyServiceInterface
{
public function __construct(EntityManager $em, LoggerInterface $logger)
{
....
}
....
}
我尝试测试:
class UserPropertyServiceTest extends KernelTestCase
{
/** @var UserPropertyService */
private $userPropertyService;
public function setUp()
{
self::bootKernel();
$client = static::createClient();
$container = $client->getContainer();
$this->userPropertyService = self::$container->get('app.user_management.user_property_service');
}
导致:
Cannot autowire service "App\Service\UserManagement\UserPropertyService": argument
"$em" of method "__construct()" references class "Doctrine\ORM\EntityManager"
but no such service exists.
Try changing the type-hint to one of its parents: interface "Doctrine\ORM\EntityManagerInterface",
or interface "Doctrine\Common\Persistence\ObjectManager".
这里合适的方法是什么?我应该使用哪个测试班?
答案 0 :(得分:1)
这就是服务测试的样子(不要让您的容器通过客户端,因为这些容器是不同的)
顺便说一句,如果您从NULL
扩展过来,就不能使用where v.code is null
(对控制器测试和static::createClient();
类有误解吗?)
KernelTestCase