我使用搜寻器测试控制器,但是当我发布不会产生任何错误的表单时,它将表单保存在数据库中。如何在symfony2中使用phpUnit进行测试时回滚任何事务
我该如何防止他在不更换控制器的情况下执行此操作,而无需测试其他内容。
这种测试有最佳做法吗? 我试过回滚,但在ControllerTest中没有更多的活动事务
我使用搜寻器测试控制器,但是当我发布不会产生任何错误的表单时,它将表单保存在数据库中。如何在symfony2中使用phpUnit进行测试时回滚任何事务
我该如何防止他在不更换控制器的情况下执行此操作,而无需测试其他内容。
这种测试有最佳做法吗? 我试过回滚,但在ControllerTest中没有更多的活动事务
您需要编写自己的扩展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
}
你可以阅读的PHPUnit的文档数据库测试
http://www.phpunit.de/manual/3.6/en/database.html
你需要设置你的数据库和拆除所做的更改。
如果你认为上面的太复杂,也许你有兴趣让你的数据库层
http://www.phpunit.de/manual/3.6/en/test-doubles.html
样机的样机是创建基于在原来的对象一个定制的对象,把你自己的测试控制。可能在这种情况下,你有兴趣在样机实体经理的学说
PHPUnit文件的数据库测试没有帮助和你提供的链接不工作。 –
这似乎是伟大的,感谢您的帮助 –