2012-09-13 26 views
3

我使用搜寻器测试控制器,但是当我发布不会产生任何错误的表单时,它将表单保存在数据库中。如何在symfony2中使用phpUnit进行测试时回滚任何事务

我该如何防止他在不更换控制器的情况下执行此操作,而无需测试其他内容。

这种测试有最佳做法吗? 我试过回滚,但在ControllerTest中没有更多的活动事务

回答

4

您需要编写自己的扩展Symfony \ Bundle \ FrameworkBundle \ Client的测试客户端类。 这是因为默认客户端不会在请求之间共享连接对象(所以您不能在测试客户端之外使用事务)。如果你扩展测试客户端,你可以自己处理交易。

在您的客户端类中,您需要创建静态连接对象,并重写方法doRequest()以避免每次都创建新的连接对象,而是使用静态连接对象。

这是很说明如下:

http://alexandre-salome.fr/blog/Symfony2-Isolation-Of-Tests

如果你有自己的doRequest方法你需要的是处理事务,所以你包裹手柄()方法开始,回退。你doRequest方法可能看起来像某事是:

protected function doRequest($request) 
{ 
    // here you need create your static connection object if it's doesn't exist yet 
    // and put it into service container as 'doctrine.dbal.default_connection' 

    (...) 
    self::$connection->beginTransaction(); 
    $response = $this->kernel->handle($request); 
    self::$connection->rollback(); 
    (...) 

    return $response 
} 
+0

这似乎是伟大的,感谢您的帮助 –

0

你可以阅读的PHPUnit的文档数据库测试

http://www.phpunit.de/manual/3.6/en/database.html

你需要设置你的数据库和拆除所做的更改。

如果你认为上面的太复杂,也许你有兴趣让你的数据库层

http://www.phpunit.de/manual/3.6/en/test-doubles.html

样机的样机是创建基于在原来的对象一个定制的对象,把你自己的测试控制。可能在这种情况下,你有兴趣在样机实体经理的学说

+0

PHPUnit文件的数据库测试没有帮助和你提供的链接不工作。 –

相关问题