如何对 Symfony2 控制器进行单元测试?

2024-01-07

我想尽可能多地使用测试驱动开发——这是一种很好的工作方式。

我对 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(使用前将#替换为@)

如何对 Symfony2 控制器进行单元测试? 的相关文章

  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • Moq - 如何对方法中引用的更改进行单元测试

    另一天 另一个问题 我的服务层有以下方法 public MatchViewData CreateMatch string user var matchViewData HasReachedMaxNumberOfMatchesLimit us
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • 使用php将数据存储到文本文件中?

    我正在尝试将数据存储在文本文件中 例如使用 php 将数组存储到文本文件中 而不是存储到 mysql 数据库中 例如 这里是要存储在文本文件中的数据 name gt john age gt 25 location gt australia
  • 一个单元在哪一级测试无锁代码?

    Can LLVM https packages debian org stretch llvm QEMU https packages debian org stretch qemu kvm GDB https packages debia
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • suhosin.mt_srand.ignore 在 PHP 中一致洗牌数组的解决方法?

    我有一个 PHP 脚本 需要随机化一个具有一致结果的数组 这样它就可以向用户呈现前几个项目 然后如果他们愿意 他们可以从同一个打乱的集合中提取更多结果 我目前使用的是这个 基于我相信的 Fisher Yates 算法 function sh
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • 单元测试时 Android Studio 2.0 中测试状态终止且没有任何失败消息

    Issue 我昨天在 Ubuntu 上从 1 5 升级到了 Android Studio 2 0 当我在 Android Studio 2 0 中进行单元测试时 即使所有测试都已通过 它也会显示 终止测试 状态 有时它只显示部分测试通过 我
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入

随机推荐

  • 项目构建失败时 Android Studio 挂起/冻结

    从今晚开始我遇到了一个非常棘手的问题 如果我的 Android 项目中有任何错误 并且构建失败 那么我的 Android 工作室就会冻结 卡住 除了杀死 Android studio 应用程序之外我什么也做不了 即使我下次打开同一个项目 g
  • 找到包含所有负循环的最小子图

    我陷入了以下问题 给定一个加权有向图 G 我想构造 G 的最小子图 其中包含 G 的所有负 简单 循环 我确实知道如何使用贝尔曼福特找到负循环 并且我知道有向图中简单循环的数量是指数级的 解决这个问题的一种天真的方法是简单地迭代所有简单循环
  • 如何使用 PyQt4 将文件移动到不同平台上的回收站/垃圾箱?

    我想向我的跨平台 PyQt4 应用程序添加下一个功能 当用户选择某个文件并选择 删除 操作时 该文件将被移动到回收站文件夹 而不是永久删除 我想我可以使用 Win32 API 或类似的东西找到特定于 Windows 的解决方案 但我想知道是
  • ImportError:没有来自 django-grappelli 的名为 apps 的模块

    我正在我的旧机器上开发一个 django 项目 它运行良好 现在我正在尝试将我的 django 开发环境转移到新机器 Linux 作为我的项目中的依赖项 我在其中使用 django grappelli 我已经使用以下命令安装了 django
  • 跨 ipdb 会话的历史记录

    这个问题已经被asked https stackoverflow com q 17138106 1224076以前 但我找不到好的答案 所以 我想再次询问一下 我希望我的 ipdb 能够记住跨会话的命令 现在 它可以提取在 Ipython
  • Ocaml 多态记录类型不太通用

    给定以下类型 type props state reactInstance props props state state updater event props state reactInstance gt event gt state
  • Cordova,在 Ubuntu 14.04 上添加 Android 平台时出现错误

    我安装了 cordova 并且可以毫无问题地创建一个新项目 但是 当我尝试添加 Android 平台时 出现以下错误 sudo cordova platform add android Running platform task Addin
  • 将字符串写入 NSPasteBoard

    我无法让这个方法返回 YES BOOL writeToPasteBoard NSString stringToWrite return pasteBoard setString stringToWrite forType NSStringP
  • 在 OS X Yosemite 上构建 binutils 的交叉编译

    我正在尝试构建 binutils 以在 Mac OS X 上生成 MIPS 代码 我找到了这个网站 http www theairportwiki com index php Building a cross compile of GCC
  • 如何使用 Moment.js 从日期中删除时间?

    formatCalendarDate function dateTime return moment utc dateTime format LLL 它显示 2013 年 2 月 28 日 09 24 但我想删除最后的时间 我怎样才能做到这
  • 如何在asdict中获取@property方法?

    我有类似的东西 from attr import attrs attrib attrs class Foo max count attrib property def get max plus one self return self ma
  • 库未加载 @rpath/AFNetworking iOS

    使用自定义 我自己创建的 框架将我的应用程序安装到设备上时 我遇到了非常奇怪的问题 MyFramework 使用 AFNetworking Dropbox 和 Google Drive 我只是将 MyFramework 拖到我的应用程序中并
  • 按列和最大日期分组时如何选择单行?

    我有以下数据想要过滤 所以我只根据第一列的分组得到一行并选择最大日期 co2 包含独特的值 col1 col2 date 1 123 2013 1 124 2012 1 125 2014 2 213 2011 2 214 2015 2 21
  • 我需要多个 EVP_CIPHER_CTX 结构吗?

    我有一个单线程客户端 服务器应用程序 需要对其网络通信进行加密和解密 我计划使用 OpenSSL 的 EVP API 和 AES 256 CBC 我从几个例子中找到了一些示例伪代码 key is 256 bits 32 bytes when
  • Vbscript列出文件夹和子文件夹中的所有PDF文件

    好吧 这是我的代码 但我无法使用 objFile Extension 过滤列表 我确信这很愚蠢 Set objFSO CreateObject Scripting FileSystemObject objStartFolder C dev
  • 了解 Vulkan 统一布局的“集合”索引

    我一直在关注 非常棒的 nvpro 光线追踪教程 并且对使用 CameraProperties 统一缓冲区的绑定方式有疑问layout binding 0 set 1 我理解绑定 0 但为什么设置 1 教程中说 set 1来自以下事实 它是
  • 导入错误:没有名为 cv2.cv 的模块

    python 3 5 和 Windows 10 我使用以下命令安装了 open cv pip install opencv python 3 1 0 cp35 cp35m win amd64 whl 这个命令在 python 中工作正常 i
  • 是否有与 git archive 相反的命令用于导入 zip 文件

    在主要修订正式纳入 大 公司 SCM 系统之前 我们的本地工作流程倾向于使用一系列 zip 文件作为本地 源代码控制 我正在尝试引入 git 作为一种更好的本地 SCM 方法 当前的工作流程对于我们的小团队来说非常有效 特别是当测试机器离线
  • Visual Studio 2015 中缺少 Xamarin 空白应用程序(本机)模板

    我已经在 Visual Studio 2015 中安装了使用 Xamarin 进行开发的所有工具 但不知何故 当我创建新项目时 我没有看到空白应用程序 本机 模板 我只能使用空白应用程序 Xamarin Forms 模板 我已经尝试重新安装
  • 如何对 Symfony2 控制器进行单元测试?

    我想尽可能多地使用测试驱动开发 这是一种很好的工作方式 我对 Symfony2 控制器创建并返回一个新的事实感到困扰Response object 我希望能够对控制器进行单独的单元测试 你怎么做呢 答案是创建一个控制器作为普通旧 PHP 对