繁体   English   中英

Symfony2功能测试:是否需要数据库?

[英]Symfony2 Functional Testing: Is a database required or not?

我必须为在应用程序中注册用户的控制器编写功能测试。

控制器有两种方法(和路由):

  • registrationAction (route = registration)
  • endAction (route = registration / end)

现在我想为这两种方法编写功能测试。

我的问题是:当控制器在数据库中创建并持久保存新用户时,我应该使用测试数据库吗? 实体经理的嘲笑是解决方案吗? 如何测试用户是否在数据库中正确创建?

Symfony的文档,谈到表单的功能测试 ,没有提到数据库,但通常是填写表单和提交表单。 但是如果我在功能测试中尝试做同样的事情,他们会返回错误(我认为他们是对的:没有数据库可以保存提交的数据!)。

所以,我认为我应该使用数据库进行功能测试,但我不明白为什么:

  1. Symfony的文档没有提到数据库
  2. 有人建议使用实体管理器的模拟。

我有点困惑:应该让我使用数据库吗?

回答这个问题不是简单的yes / no ,你可以两种方式来做,都有其优点和缺点。

1.带测试数据库

你提到你需要编写控制器测试。 测试控制器正在测试您的应用程序流程的几乎顶层。 如果您希望使用隔离测试控制器逻辑,则控制器依赖于您需要模拟的许多类实现。 如果您的控制器使用service container将它的依赖项注入到构造函数service container我可能会想到模拟,但如果它扩展了Symfony的Controller我会使用测试数据库模拟在这种情况下的一切都会很苛刻。

2.没有数据库

在这种情况下,您需要模拟您的entity manager ,这是可能的。 但是在你的情况下,我会考虑重构 将控制器外部的逻辑移动到某个UserManager或类似的类。 将此类注册为服务并注入所有必需的依赖项。 认为所描述的注入资源库,而不是整体的EntityManager的位置 现在,因为您的代码更单一,所以编写测试更容易,并且更容易模拟所有依赖项。

结论 :进行重构,将您的逻辑移到控制器之外,通过向其中注入多个依赖项来为单个负责类编写测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM