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

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

作者:互联网

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

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

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

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

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

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

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

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

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

解决方法:

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

1.带有测试数据库

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

2.无数据库

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

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

标签:doctrine-orm,unit-testing,symfony,functional-testing,php
来源: https://codeday.me/bug/20191028/1950730.html