我们可以使用Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase进行symfony 2控制台命令测试吗?

时间:2013-08-10 09:56:06

标签: php symfony phpunit

使用Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase,我们可以轻松访问容器,实体管理器等。我们可以通过自动手动HTTP请求将其用于功能测试。

我们是否可以使用它来测试Symfony2控制台命令,以便我们可以轻松访问容器和所有服务?

我想测试我的costum Symfony2控制台命令,它使用许多服务,而这些服务又使用doctrine实体管理器来访问数据。

PHPunit文档建议使用PHPUnit_Extensions_Database_TestCase

扩展测试类

我们可以扩展WebTestCase而不是测试来测试控制台命令吗?

我已经审稿了

1 个答案:

答案 0 :(得分:4)

WebTestCase用于对您的Web应用程序进行功能测试。没有什么能阻止你使用它来测试命令,但它感觉不对(因此你的问题)。

测试命令

请记住,命令测试(以及控制器测试)不应该很复杂,就像你放在那里的代码一样也不应该很复杂。

将您的命令视为控制器,让它们变得纤细,并将您的业务逻辑放在它所属的位置 - 模型。

访问容器

话虽如此,您可以自己实现自己的 KernelAwareTestCase (或 ContainerAwareTestCase )。这是我偶尔使用的基类:jakzal / KernelAwareTest.php Gist

另请注意,Symfony\Component\Console\Application旁边有一个Symfony\Bundle\FrameworkBundle\Console\Application,它实际上可以与Symfony内核一起使用。

最后的注释

请记住,最广泛的测试应该在单元级别上完成。