Unit testing Symfony2具有条令实体的单元测试

Unit testing Symfony2具有条令实体的单元测试,unit-testing,symfony,phpunit,Unit Testing,Symfony,Phpunit,我显然错过了一些非常明显的东西,但这让我发疯: 为了测试我的代码,我需要将我的实体置于定义的状态。它根本不起作用。它完全忽略我所做的任何更改,例如: $this->test_character->setLocation(null); $crawler = $this->client->request('GET', '/en/character/start'); $this->assertTrue($this->client->g

我显然错过了一些非常明显的东西,但这让我发疯:

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

    $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');

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

你说得对-处理你的测试请求的内核是你应用程序的一个独立实例。它将无法访问您可能加载到test_character中的实体,除非您在发出请求之前坚持并将其刷新到数据库中

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


您可能还想研究如何自动设置测试数据库和测试夹具。

什么是$this->test\u字符与测试有关?当您测试后端时,您模拟一个客户端(浏览器)访问它。你不应该做任何与客户可以对你的应用程序做的不同的事情。谢谢。是的,我考虑过fixture,但我有点不喜欢在位置A定义数据集,然后在位置B依赖其特定细节的想法-我更愿意将其捆绑在一个位置。至少这是我这样做背后的想法。我来看看Liip包。我会用你的解决方案。这似乎是Symfony想要的方式。对不起,我错投了这个。我以为我不小心把它投了个高票,然后试图撤销它。除非修改答案,否则我不会再投票。