![](/img/trans.png)
[英]For Symfony2 functional testing, what is the best practice for verifying database contents?
[英]Symfony2 Functional Testing: Is a database required or not?
我必须为在应用程序中注册用户的控制器编写功能测试。
控制器有两种方法(和路由):
registrationAction
(route = registration) endAction
(route = registration / end) 现在我想为这两种方法编写功能测试。
我的问题是:当控制器在数据库中创建并持久保存新用户时,我应该使用测试数据库吗? 实体经理的嘲笑是解决方案吗? 如何测试用户是否在数据库中正确创建?
Symfony的文档,谈到表单的功能测试 ,没有提到数据库,但通常是填写表单和提交表单。 但是如果我在功能测试中尝试做同样的事情,他们会返回错误(我认为他们是对的:没有数据库可以保存提交的数据!)。
所以,我认为我应该使用数据库进行功能测试,但我不明白为什么:
我有点困惑:应该让我使用数据库吗?
回答这个问题不是简单的yes
/ no
,你可以两种方式来做,都有其优点和缺点。
1.带测试数据库
你提到你需要编写控制器测试。 测试控制器正在测试您的应用程序流程的几乎顶层。 如果您希望使用隔离测试控制器逻辑,则控制器依赖于您需要模拟的许多类实现。 如果您的控制器使用service container
将它的依赖项注入到构造函数service container
我可能会想到模拟,但如果它扩展了Symfony的Controller
我会使用测试数据库模拟在这种情况下的一切都会很苛刻。
2.没有数据库
在这种情况下,您需要模拟您的entity manager
,这是可能的。 但是在你的情况下,我会考虑重构 。 将控制器外部的逻辑移动到某个UserManager
或类似的类。 将此类注册为服务并注入所有必需的依赖项。 认为所描述的注入资源库,而不是整体的EntityManager的位置 。 现在,因为您的代码更单一,所以编写测试更容易,并且更容易模拟所有依赖项。
结论 :进行重构,将您的逻辑移到控制器之外,通过向其中注入多个依赖项来为单个负责类编写测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.