Unit testing $this->;assertEquals错误:无法断言null与预期匹配
我正在做实体的测试单元:Unit testing $this->;assertEquals错误:无法断言null与预期匹配,unit-testing,symfony,phpunit,Unit Testing,Symfony,Phpunit,我正在做实体的测试单元: 名称空间路径tomybundle\Tests; 需要_once dirname(uu DIR_uu)。'/../../../../app/AppKernel.php'; 使用条令\ORM\Tools\SchemaTool; 抽象类TestCase扩展\PHPUnit\u框架\u TestCase { /** *@var Symfony\Component\HttpKernel\AppKernel */ 受保护的$kernel; /** *@var-Doctrine\OR
名称空间路径tomybundle\Tests;
需要_once dirname(uu DIR_uu)。'/../../../../app/AppKernel.php';
使用条令\ORM\Tools\SchemaTool;
抽象类TestCase扩展\PHPUnit\u框架\u TestCase
{
/**
*@var Symfony\Component\HttpKernel\AppKernel
*/
受保护的$kernel;
/**
*@var-Doctrine\ORM\EntityManager
*/
受保护的$entityManager;
/**
*@var Symfony\Component\DependencyInjection\Container
*/
受保护的集装箱;
公共功能设置()
{
//在测试环境中引导AppKernel并使用调试。
$this->kernel=new\AppKernel('test',true);
$this->kernel->boot();
//将容器和实体管理器存储在测试用例属性中
$this->container=$this->kernel->getContainer();
$this->entityManager=$this->container->get('doctrine')->getEntityManager();
//为sqlite构建模式
//$this->generateSchema();
父::设置();
}
公共函数拆卸()
{
//关闭内核。
$this->kernel->shutdown();
父::拆卸();
}
受保护函数generateSchema()
{
//获取应用程序的元数据以创建模式。
$metadatas=$this->getMetadatas();
如果(!empty($metadatas)){
//创建模式
$tool=newschematool($this->entityManager);
$tool->createSchema($metadatas);
}否则{
抛出新的条令\DBAL\Schema\SchemaException('没有要处理的元数据类');
}
}
/**
*覆盖此方法以获取特定的元数据。
*
*@return数组
*/
受保护的函数getMetadatas()
{
返回$this->entityManager->getMetadataFactory()->getAllMetadata();
}
}
而且:
名称空间路径tomybundle\Tests\Entity;
使用pathtomybundle\Tests\TestCase;
使用pathtomybundle\Entity\Calendars;
需要_once dirname(uu DIR_uu)。'/TestCase.php';
类CalendarsDbTest扩展了TestCase
{
受保护的$日历;
公共功能设置()
{
父::设置();
$this->Calendars=新日历();
}
公共函数testGenerateCalendars()
{
$this->Calendars->setBeginDate(new\DateTime('now');
$this->Calendars->setDescription('Description');
$this->Calendars->setEndDate(new\DateTime('now'));
$this->Calendars->setType('sur titre');
//节约开支
$this->entityManager->persist($this->Calendars);
$this->entityManager->flush();
}
公共函数testUser(){
$this->assertEquals('Description',$this->Calendars->getDescription());
}
因此,我的问题是:
- 为什么它会引发此错误“无法断言null与预期匹配”
- 为什么
返回getDescription()
NULL
- 如何测试具有一对多关系的两个表,例如我的表日历和数据库中的另一个表
/**
* @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-另一个问题:要创建数据库_测试,我使用“$this->generateSchema();
因此,在第一次创建数据库之后,当测试再次调用“TestCase”类(上面的代码)时,他试图再次创建数据库\u测试,那么我必须在第一次之后删除该行,这是不好的,那么,在第一次运行测试时,我可以做些什么来只运行这一行
编辑-3
/**
* @var Job
*
* @ORM\ManyToOne(targetEntity="Job")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="job_id", referencedColumnName="id")
* })
*/
private $job;
正常吗
class CalendarTest extends \PHPUnit_Framework_TestCase
{
(...)
public function testSetGetJob()
{
$job = new Job();
$job->setSomeProperty('someValue');
$expectedJob = clone $job; // you clone this because in setter you pass object by reference
$calendar = new Calendar();
$calendar->setJob($job);
$this->assertEquals($expectedJob, $calendar->getJob());
}
(...)
}