问题描述
我正在API Platform(基于Symfony 5构建)和PHPUnit中为我的代码编写测试。
我创建了一个名为TestContext
的基本测试用例,它扩展了ApiTestCase
。我所有的测试类都将扩展TestContext
以重用共享的测试样板代码。
我还尝试使用依赖项注入(或服务位置)来解析Repository类,以便可以在所有子类中访问它们。
在我的测试课程中访问我的存储库的最干净,最简单和最佳实践的方法是什么?
解决方法
为了注入用于API测试的存储库,我有一个src / Test / BaseApiTest.php
namespace App\Test;
use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\ApiTestCase;
use Doctrine\ORM\EntityManagerInterface;
use Hautelook\AliceBundle\PhpUnit\ReloadDatabaseTrait;
class BaseApiTestCase extends ApiTestCase
{
use ReloadDatabaseTrait;
protected ?EntityManagerInterface $em;
protected function setUp(): void
{
$kernel = self::bootKernel();
$this->em = $kernel->getContainer()
->get('doctrine')
->getManager();
}
}
然后在我的根tests
目录中进行测试,我可以按照他的指示进行访问:
//tests/UserRessourceTest.php
<?php
namespace App\Tests;
use App\Entity\User;
use App\Test\BaseApiTestCase;
class UserResourceTest extends BaseApiTestCase
{
public function testDeleteAccount(): void
{
...
/** @var User $deletedUser */
$deletedUser = $this->em->getRepository(User::class)->findOneById($user->getId());
...
}
}
这对于我的大多数情况都很好。我希望它对您有用;)