我正在做我的实体的测试单元:
namespace PathtomyBundle\Tests;
require_once dirname(__DIR__).'/../../../app/AppKernel.php';
use Doctrine\ORM\Tools\SchemaTool;
abstract class TestCase extends \PHPUnit_Framework_TestCase
{
/**
* @var Symfony\Component\HttpKernel\AppKernel
*/
protected $kernel;
/**
* @var Doctrine\ORM\EntityManager
*/
protected $entityManager;
/**
* @var Symfony\Component\DependencyInjection\Container
*/
protected $container;
public function setUp()
{
// Boot the AppKernel in the test environment and with the debug.
$this->kernel = new \AppKernel('test', true);
$this->kernel->boot();
// Store the container and the entity manager in test case properties
$this->container = $this->kernel->getContainer();
$this->entityManager = $this->container->get('doctrine')->getEntityManager();
// Build the schema for sqlite
//$this->generateSchema();
parent::setUp();
}
public function tearDown()
{
// Shutdown the kernel.
$this->kernel->shutdown();
parent::tearDown();
}
protected function generateSchema()
{
// Get the metadatas of the application to create the schema.
$metadatas = $this->getMetadatas();
if ( ! empty($metadatas)) {
// Create SchemaTool
$tool = new SchemaTool($this->entityManager);
$tool->createSchema($metadatas);
} else {
throw new Doctrine\DBAL\Schema\SchemaException('No Metadata Classes to process.');
}
}
/**
* Overwrite this method to get specific metadatas.
*
* @return Array
*/
protected function getMetadatas()
{
return $this->entityManager->getMetadataFactory()->getAllMetadata();
}
}
并且:
namespace pathtomybundle\Tests\Entity;
use pathtomybundle\Tests\TestCase;
use pathtomybundle\Entity\Calendars;
require_once dirname(__DIR__).'/TestCase.php';
class CalendarsDbTest extends TestCase
{
protected $Calendars;
public function setUp()
{
parent::setUp();
$this->Calendars = new Calendars();
}
public function testGenerateCalendars()
{
$this->Calendars->setBeginDate(new \DateTime('now'));
$this->Calendars->setDescription('Description');
$this->Calendars->setEndDate(new \DateTime('now'));
$this->Calendars->setType('sur titre');
// Save the ExCalendars
$this->entityManager->persist($this->Calendars);
$this->entityManager->flush();
}
public function testUser(){
$this->assertEquals('Description', $this->Calendars->getDescription() );
}
所以我的问题是:
为什么会引发此错误“断言 null 匹配预期失败”?
为什么
getDescription()
退货NULL
?如何测试两个具有一对多关系的表,例如我的表日历与数据库中的另一个表?
编辑
对于第三个问题:
例如,我有两个表作业和具有多对一关系的日历,所以我将在日历表中有一个 Job_Id 字段,所以我将如何使用外键“job_id”进行测试单元
在日历实体中:
/**
* @var Job
*
* @ORM\ManyToOne(targetEntity="Job")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="job_id", referencedColumnName="job_id")
* })
*/
private $jobId;
编辑-2-
当我运行我的 phpunit 测试“phpunit -c app”来测试 setters 函数并保存在数据库中时,所以我每次测试都有一个插入数据库的新数据,我的问题是可以做很多测试,但我将数据插入数据库只是一次,因为实际上我必须在每次测试时从数据库中删除数据。
2 - 另一个问题:创建一个database_test我使用“$this->generateSchema();”所以在第一次创建数据库并且当测试再次调用“TestCase”类(上面的代码)时,他试图创建再次数据库测试,然后我必须在第一次之后删除该行,这并不好,那么当我第一次运行我的测试时,我能做些什么来只运行一次这个行?
编辑-3
/**
* @var Job
*
* @ORM\ManyToOne(targetEntity="Job")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="job_id", referencedColumnName="id")
* })
*/
private $job;
这是正常的?