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

Php 我们可以使用Symfony\Bundle\FrameworkBundle\Test\WebTestCase进行Symfony 2控制台命令测试吗?,php,symfony,phpunit,Php,Symfony,Phpunit,使用Symfony\Bundle\FrameworkBundle\Test\WebTestCase,我们可以轻松访问容器、实体管理器等。我们可以通过自动手动HTTP请求将其用于功能测试 我们是否可以使用它来测试Symfony2控制台命令,以便能够轻松访问容器和所有服务 我想测试我的costum Symfony2控制台命令,它使用许多服务,这些服务反过来又使用条令实体管理器来访问数据 PHPunit文档建议使用PHPunit\u扩展\u数据库\u测试用例扩展测试类 我们可以扩展WebTestCas

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

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

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

PHPunit文档建议使用PHPunit\u扩展\u数据库\u测试用例扩展测试类

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

我已经当过裁判了

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

测试命令

请记住,命令测试和控制器测试不应该很复杂,就像您在其中输入的代码也不应该很复杂一样

将您的命令视为控制器,使其变细,并将您的业务逻辑放在它所属的位置—属于模型

访问容器

话虽如此,您可以自己实现自己的KernelAwareTestCase或ContainerAwareTestCase。下面是我偶尔使用的一个基类:

另外,请注意,在Symfony\Component\Console\Application旁边有一个Symfony\Bundle\FrameworkBundle\Console\Application,它实际上可以与Symfony内核一起工作

最后说明

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

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

测试命令

请记住,命令测试和控制器测试不应该很复杂,就像您在其中输入的代码也不应该很复杂一样

将您的命令视为控制器,使其变细,并将您的业务逻辑放在它所属的位置—属于模型

访问容器

话虽如此,您可以自己实现自己的KernelAwareTestCase或ContainerAwareTestCase。下面是我偶尔使用的一个基类:

另外,请注意,在Symfony\Component\Console\Application旁边有一个Symfony\Bundle\FrameworkBundle\Console\Application,它实际上可以与Symfony内核一起工作

最后说明


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

谢谢,要访问实体管理器或条令实体存储库,好的做法是什么,我应该使用模拟存储库还是容器感知测试用例?这取决于您编写的测试类型。在单元测试中,您应该模拟协作者,避免查询数据库。在集成或功能测试中,您可能正在访问数据库。您应该编写比其他类型更多的单元测试。阅读测试金字塔。谢谢,要访问实体管理器或条令实体存储库,好的做法是什么,我应该使用模拟存储库还是容器感知测试用例?这取决于您编写的测试类型。在单元测试中,您应该模拟协作者,避免查询数据库。在集成或功能测试中,您可能正在访问数据库。您应该编写比其他类型更多的单元测试。阅读测试金字塔。