使用assertEquals测试Doctrine2实体会导致致命的内存不足错误



我有一个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之外,还应该测试类。

最新更新