使用Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase,我们可以轻松访问容器,实体管理器等。我们可以通过自动手动HTTP请求将其用于功能测试。
我们是否可以使用它来测试Symfony2控制台命令,以便我们可以轻松访问容器和所有服务?
我想测试我的costum Symfony2控制台命令,它使用许多服务,而这些服务又使用doctrine实体管理器来访问数据。
PHPunit文档建议使用PHPUnit_Extensions_Database_TestCase
,
我们可以扩展WebTestCase
而不是测试来测试控制台命令吗?
我已经审稿了
答案 0 :(得分:4)
WebTestCase
用于对您的Web应用程序进行功能测试。没有什么能阻止你使用它来测试命令,但它感觉不对(因此你的问题)。
测试命令
请记住,命令测试(以及控制器测试)不应该很复杂,就像你放在那里的代码一样也不应该很复杂。
将您的命令视为控制器,让它们变得纤细,并将您的业务逻辑放在它所属的位置 - 模型。
访问容器
话虽如此,您可以自己实现自己的 KernelAwareTestCase (或 ContainerAwareTestCase )。这是我偶尔使用的基类:jakzal / KernelAwareTest.php Gist
另请注意,Symfony\Component\Console\Application
旁边有一个Symfony\Bundle\FrameworkBundle\Console\Application
,它实际上可以与Symfony内核一起使用。
最后的注释
请记住,最广泛的测试应该在单元级别上完成。