微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

> registrationAction(路线=注册)
> endAction(路由=注册/结束)

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

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

Symfony的文档(约有functional testing of forms)没有提及数据库,但是通常会填写表格并提交.但是,如果我尝试在功能测试中做同样的事情,它们会返回错误(我认为它们是正确的:没有数据库可保存提交的数据!).

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

> Symfony的文档没有提及数据库
>有人建议使用实体管理器的模拟.

我有些困惑:是否应该使用数据库

解决方法:

对这个问题的回答不是简单的是/否,您可以通过两种方式做到这一点,都有其优点和缺点.

1.带有测试数据库

您提到需要编写控制器测试.测试控制器正在测试应用程序流程的几乎顶层.控制器取决于许多类实现,如果您想使用隔离来测试控制器逻辑,则需要模拟这些实现.如果您的控制器使用服务容器将其依赖项注入到构造器中,我可能会想到模拟,但是如果它扩展了Symfony的Controller,那么我将使用测试数据库模拟,在这种情况下,所有操作都会很苛刻.

2.无数据库

在这种情况下,您需要模拟实体管理器,这是可能的.但是在您的情况下,我会考虑进行重构.将控制器外部的逻辑移至某些UserManager或类似的类.将此类注册为服务,并注入所有必需的依赖项.考虑像here所述注入存储库,而不是整个EntityManager.现在,由于您的代码更负责任,因此编写测试更容易,并且更容易模拟所有依赖项.

结论:进行重构,将逻辑移出控制器,通过向其注入依赖项的模拟为单个负责的类编写测试.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐