我正在学习测试我的Symfony2代码而我正在尝试构建测试,但是,我正在使用DataFixtures来加载数据,并且我认为这样做也测试我的实体。我将使用一个测试作为示例:CreateCompanyControllerTest.php
,这是我在每个测试中运行的基本代码:
private $em;
protected static $application;
public function setUp() {
static::$kernel = static::createKernel();
static::$kernel->boot();
$this->em = static::$kernel->getContainer()->get('doctrine')->getManager();
self::runCommand('doctrine:schema:update --force');
$loader = new Loader();
$loader->addFixture(new LoadCompanyData());
$purger = new ORMPurger();
$executor = new ORMExecutor($this->em, $purger);
$executor->execute($loader->getFixtures());
}
protected static function runCommand($command) {
$command = sprintf('%s --quiet', $command);
return self::getApplication()->run(new StringInput($command));
}
protected static function getApplication() {
if (null === self::$application) {
$client = static::createClient();
self::$application = new Application($client->getKernel());
self::$application->setAutoExit(false);
}
return self::$application;
}
我不知道是否一直运行命令doctrine:schema:update --force
是正确的,因为它清理了我的数据库完成,这是我的第一个怀疑。现在关于LoadCompanyData.php
中的同样问题我有一些实体依赖(参见下面的代码:
$mediaType = $manager->getRepository('MediaBundle:NMediaType')->find(1);
$mediaStatus = $manager->getRepository('MediaBundle:NMediaStatus')->find(1);
但是,自从我运行命令doctrine:schema:update --force
后,我的数据库被清理干净,然后测试失败并显示以下消息:
1) 公司\ RegisterCompanyBundle \测试\控制器\ CreateCompanyControllerTest :: testcreateCompanyAction 参数1传递给Wuelto \ Common \ MediaBundle \ Entity \ Media :: setType() 必须是Common \ MediaBundle \ Entity \ NMediaType的实例,为null 给予,召唤 /var/www/html/kraken/src/Company/RegisterCompanyBundle/DataFixtures/ORM/LoadCompanyData.php 在第46行并定义
它是正确的,因为该表是空的。然后知道这个:
getOrder()
设置了加工灯具的顺序,但是我如何使用它?我的意思是例如在加载公司的数据之前我应该先为依赖实体添加数据,对此有何建议?答案 0 :(得分:1)
总是清理测试数据库是一种很好的做法,您的测试应该是自包含的,而不是依赖于之前测试中数据库中遗留的任何内容。
话虽如此,是的,你还应该设置fixtures或helper函数,在你的测试数据库中插入你需要的任何必要数据。
您可以为每个测试文件执行一次此设置。数据库测试费用昂贵,时间紧迫,所以如果您可以通过模拟调用db来实现这一点,那么这一切都取决于您要测试的内容。