我想尽可能多地使用测试驱动开发——这是一种很好的工作方式。
我对 Symfony2 控制器创建并返回一个新的事实感到困扰Response
object.
我希望能够对控制器进行单独的单元测试。
你怎么做呢?
答案是创建一个控制器作为普通旧 PHP 对象,将其注册为服务并使用依赖注入来传递新的Response
对象(或Response
工厂)进入吗?
通常,您的控制器将不同的对象插入在一起并按正确的顺序连接它们。也许他调用存储库,读取一些对象并通过 render 方法返回它们。也许他会打电话给其他做事的处理程序/经理。
这意味着控制器是一个高级组件。这通常表明功能测试而不是单元测试是正确的。您不应该以单元测试获得 100% 的代码覆盖率为目标。也许您可以这样想:如果您对控制器调用的所有内容(模型、验证、表单、存储库)进行单元测试,可能会出现什么问题?大多数时候,您只有在使用生产中涉及的所有真实类时才能观察到这种情况。
我还想指出,TDD 并不意味着一切都必须进行单元测试。对高级代码进行一些功能测试是可以的。如前所述,如果您使用单元测试来测试低级组件,您应该只测试它们如何协同工作,而您无法使用模拟来测试它们,因为您告诉模拟返回值是什么。
如果您的控制器不仅仅将系统的各个部分插入在一起,您应该考虑将这些内容重构为可以通过单元测试进行测试的更底层的类。
所以我的建议将使用功能测试来测试您的控制器,并使用单元测试来测试您的模型和业务逻辑内容。
如果您在功能测试方面遇到困难,您可以阅读以下内容:
- http://symfony.com/doc/current/book/testing.html#function-tests http://symfony.com/doc/current/book/testing.html#functional-tests
- http://blog.sznapka.pl/complete-isolated-tests-in-symfony2/ http://blog.sznapka.pl/fully-isolated-tests-in-symfony2/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)