使用Doctrine实体进行Symfony2单元测试

时间:2013-02-18 13:16:14

标签: unit-testing symfony phpunit

我显然错过了一些非常明显的东西,但这让我很生气:

为了测试我的代码,我需要将我的实体置于已定义的状态。它根本不起作用。它完全忽略了我所做的任何改变,比如这个改变:

    $this->test_character->setLocation(null);

    $crawler = $this->client->request('GET', '/en/character/start');
    $this->assertTrue($this->client->getResponse()->isSuccessful(), "start page failed to load");
    $this->assertGreaterThan(0, $crawler->filter('html:contains("Character Placement")')->count(), 'start page content failure');

调试此测试表明它失败了,因为Location实际上并未设置为null。添加flush()不会改变任何东西,所以这不是问题。我最好的猜测是它只在测试客户端上进行更改,但不会在生成页面的后端进行更改但是会留下一个问题:如何将我的实体置于已定义的状态以便对其进行测试?

1 个答案:

答案 0 :(得分:1)

您的排名正确 - 处理您的测试请求的内核是您应用的独立实例。它将无法访问您可能加载到test_character中的实体,除非您在发出请求之前坚持将其刷新到数据库。

您是否考虑过使用Fixtures?如果您所做的只是初始化一些准备测试请求/响应的实体,那么这是正确的方法。您永远不需要直接使用功能测试中的实体。

您可能还需要查看Liip functional test bundle以自动设置测试数据库和测试夹具。