我有一个PHPUnit测试,它使用Doctrine2自定义存储库和Doctrine Fixtures。我想测试一个查询是否从我的fixture中返回了一个预期的实体。
但当我尝试$this->assertEquals($expectedEntity, $result);
时,我得到了Fatal error: out of memory
。我猜它正在反复出现在所有的关系和实体经理之类的人身上。
有没有一个好的方法来检验这种平等?我应该只对实体的ID进行assertEquals吗?
编辑:这是测试代码
<?php
use LiipFunctionalTestBundleTestWebTestCase;
class AbstractRepositoryTestCase extends WebTestCase
{
/**
* @var DoctrineORMEntityRepository
*/
protected $repo;
/**
* @var DoctrineCommonDataFixturesExecutorAbstractExecutor
*/
protected $fixtureExecutor;
/**
* @var string Which repository to load, overriden by derived class
*/
protected $repoName;
/**
* @var array Fixture classes to load on setup
*/
protected $fixtures = array();
public function setUp()
{
$kernel = static::createKernel();
$this->repo = $kernel->boot();
$this->repo = $kernel->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository($this->repoName);
$this->fixtureExecutor = $this->loadFixtures($this->getFixtures());
}
public function getFixtures()
{
return $this->fixtures;
}
}
class ArticleRepositoryTest extends AbstractRepositoryTestCase
{
/**
* @var string Which repository to load, overriden by derived class
*/
protected $repoName = 'MyMainBundle:Article';
/**
* @var array Fixture classes to load on setup
*/
protected $fixtures = array(
'MyMainBundleDataFixturesORMLoadUserData',
'MyMainBundleDataFixturesORMLoadArticleData',
'MyMainBundleDataFixturesORMLoadFeedsData',
'MyMainBundleDataFixturesORMLoadFeedDataData',
'MyMainBundleDataFixturesORMLoadUserReadArticleData',
);
public function testGetNextArticle_ExpectCorrect()
{
/** @var DoctrineCommonDataFixturesReferenceRepository **/
$refRepo = $this->fixtureExecutor->getReferenceRepository();
/** @var FeedStreamMainBundleEntityArticle **/
$curr = $refRepo->getReference('feed-1-article-3');
$expected = $refRepo->getReference('feed-1-article-2');
$expected2 = $refRepo->getReference('feed-1-article-1');
$next = $this->repo->getNextArticle($curr->getFeed()->getId(), $curr);
$this->assertNotNull($next);
// this is the part that doesn't work
$this->assertEquals($expected, $next);
// this is the code I've used instead
$this->assertEquals($expected->getId(), $next->getId());
}
}
以下是实体(省略getter/setter以节省空间)
<?php
namespace MyMainBundleEntity;
use DoctrineORMMapping as ORM;
/**
* MyMainBundleEntityArticle
*
* @ORMTable(name="articles", uniqueConstraints={
* @ORMUniqueConstraint(name="feed_guid", columns={"feed_id", "guid"}),
* @ORMUniqueConstraint(name="article_slug_unique", columns={"feed_id", "slug"})
* })
* @ORMEntity(repositoryClass="MyMainBundleRepositoryArticleRepository")
*/
class Article
{
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer", nullable=false)
* @ORMId
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string $guid
*
* @ORMColumn(name="guid", type="string", length=255, nullable=false)
*/
private $guid;
/**
* @var string $title
*
* @ORMColumn(name="title", type="string", length=255, nullable=false)
*/
private $title;
/**
* @var datetime $pubDate
*
* @ORMColumn(name="pub_date", type="datetime", nullable=true)
*/
private $pubDate;
/**
* @var text $summary
*
* @ORMColumn(name="summary", type="text", nullable=true)
*/
private $summary;
/**
* @var text $content
*
* @ORMColumn(name="content", type="text", nullable=false)
*/
private $content;
/**
* @var string $sourceUrl
*
* @ORMColumn(name="source_url", type="string", length=255, nullable=true)
*/
private $sourceUrl;
/**
* @var string $commentUrl
*
* @ORMColumn(name="comment_url", type="string", length=255, nullable=true)
*/
private $commentUrl;
/**
* @var string $slug
*
* @ORMColumn(name="slug", type="string", length=64, nullable=false)
*/
private $slug;
/**
* @var string $thumbnailFile
*
* @ORMColumn(name="thumbnail_file", type="string", length=64, nullable=true)
*/
private $thumbnailFile;
/**
* @var MyMainBundleEntityArticleEnclosure
*
* @ORMManyToOne(targetEntity="MyMainBundleEntityArticleEnclosure")
* @ORMJoinColumns({
* @ORMJoinColumn(name="thumbnail_enclosure_id", referencedColumnName="id")
* })
*/
private $thumbnailEnclosure;
/**
* @var MyMainBundleEntityArticleImageScrape
*
* @ORMManyToOne(targetEntity="MyMainBundleEntityArticleImageScrape")
* @ORMJoinColumns({
* @ORMJoinColumn(name="thumbnail_scrape_id", referencedColumnName="id", unique=false)
* })
*/
private $thumbnailScrape;
/**
* @var MyMainBundleEntityArticleBitly
*
* @ORMOneToOne(targetEntity="MyMainBundleEntityArticleBitly", mappedBy="article", orphanRemoval=true)
*/
private $bitly;
/**
* @var MyMainBundleEntityArticleEnclosure
*
* @ORMOneToMany(targetEntity="MyMainBundleEntityArticleEnclosure", mappedBy="article", orphanRemoval=true)
*/
private $enclosures;
/**
* @var MyMainBundleEntityArticleImageScrape
*
* @ORMOneToMany(targetEntity="MyMainBundleEntityArticleImageScrape", mappedBy="article", orphanRemoval=true)
*/
private $scrapes;
/**
* @var MyMainBundleEntityArticleLink
*
* @ORMOneToMany(targetEntity="MyMainBundleEntityArticleLink", mappedBy="article", orphanRemoval=true)
*/
private $links;
/**
* @var MyMainBundleEntityFeed
*
* @ORMManyToOne(targetEntity="MyMainBundleEntityFeed", inversedBy="articles")
* @ORMJoinColumns({
* @ORMJoinColumn(name="feed_id", referencedColumnName="id", nullable=false)
* })
*/
private $feed;
/**
* @var MyMainBundleEntityArticleAuthor
*
* @ORMManyToOne(targetEntity="MyMainBundleEntityArticleAuthor", inversedBy="articles")
* @ORMJoinColumns({
* @ORMJoinColumn(name="author_id", referencedColumnName="id")
* })
*/
private $author;
public function __construct()
{
$this->links = new DoctrineCommonCollectionsArrayCollection();
}
}
除了ID之外,还应该测试类。