PHPUnit 在运行第一个测试之前进行设置,并在运行最后一个测试之后进行拆除

2024-03-20

我正在尝试使用 PHPUnit 为 php 应用程序实现类似 Django 的测试实用程序。类似 Django,我的意思是在运行第一个测试之前从主数据库创建一个单独的测试数据库,并在运行最后一个测试后将其删除。即使一次运行许多测试用例,测试数据库也只需要创建一次。

为此,我采取了以下方法——

我定义了一个自定义测试套件类,以便我可以在其设置和拆卸方法中编写用于创建和删除数据库的代码,然后使用此类来运行测试,如下所示

$ phpunit MyTestSuite

MyTestSuite 定义了一个静态方法,名为suite我刚刚使用的地方glob并将测试添加到测试套件中,如下所示

public static function suite() {
    $suite = new MyTestSuite();

    foreach (glob('./tests/*Test.php') as $tc) {
        require_once $tc;
        $suite->addTestSuite(basename($tc, '.php'));
    }

    return $suite;
}

所有测试用例类都从以下子类扩展而来PHPUnit_Framework_TestCase该类的 setup 和teardown 方法负责从 json 夹具文件加载和清除初始数据。

现在作为没有。测试不断增加,我一次只需要运行选定的测试。但由于我已经使用测试套件加载测试,因此无法使用 --filter 选项。 这让我觉得这种做法可能不是正确的。

所以我的问题是,在运行第一个测试之前和运行最后一个测试之后执行某些操作的正确方法是什么,无论 PHPUnit 如何找到它们?

PS:我没有使用 PHPUnit_Extensions_Database_TestCase,而是我自己创建、填充和删除数据库的实现。


我最近遇到了一些需要解决同样问题的事情。我试过埃多利亚人的回答 https://stackoverflow.com/a/10897030/390977__destruct自定义类的方法,但它似乎是在每次测试结束时运行,而不是在all tests.

我没有在 bootstrap.php 文件中使用特殊的类,而是使用了 PHP 的register_shutdown_function http://php.net/manual/en/function.register-shutdown-function.php在我的所有测试结束后处理数据库清理的函数,它似乎工作得很好。

这是我的 bootstrap.php 文件中的示例

register_shutdown_function(function(){
   some_db_cleanup_methods();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHPUnit 在运行第一个测试之前进行设置,并在运行最后一个测试之后进行拆除 的相关文章

  • 变量前面的@是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 参考 这个符号在 PHP 中意味着什么 https stackoverflow com questions 3737139 reference what does this symbol mean i
  • PHP - 如何将图像资源写入文件

    我用了函数imagecopyresampled到裁剪图像 我尝试使用file put contents和 fwrite 将 resized image 写入硬盘上的文件 但所有尝试都失败了 我可以将调整大小的图像写入磁盘而不是使用image
  • PHP MYSQL文件内容转义问题

    我正在尝试使用 php 将 pdf 文件上传到 mysql 数据库中 除了文件内容之外 一切都很好 无论我如何尝试转义特殊字符 查询总是失败 主要是 未知命令 n 我使用过addslashes mysql real escape strin
  • 在 CodeIgniter 中将数组与 Calendar 类一起使用

    我正在尝试为我的日历应用程序创建一个相当复杂的数组 它应该包含日期 日期名称 类型 和事件 如果有 我已经创建了这个 dates 22 day gt Friday type gt weekday 23 day gt Saturday typ
  • PHP 中的 Europe/London 和 UTC 有区别吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我知道 UTC 和 GMT 实际上是
  • 根据选择值显示/隐藏字段

    我试图根据我选择的字段之一的值显示和隐藏一些表单字段 我希望使用数组来保存每个选择值应该显示的内容和不应该显示的内容 以将我从大量的 switch 语句中拯救出来 但无法弄清楚如何做到这一点 我正在使用 PHP 和 jQuery 任何帮助都
  • PHP-将字符串转换为unicode

    我在做这个工作 source mb convert encoding test unicode utf 8 source unpack C source var dump source return array size 8 1 gt in
  • PHP设置全局环境变量的方法

    我已阅读问题 答案here https stackoverflow com questions 13568191 how to get system environment variables into php while running
  • 在 woocommerce 管理订单页面中单击自定义按钮运行函数

    基于 在 woocommerce 中的管理订单列表顶部添加一个按钮 https stackoverflow com questions 49437781 add a button on top of admin orders list in
  • 如何在codeigniter中插入具有多个单选名称的单选按钮值?

    我正在尝试使用 codeigniter 进行在线测验 其中有一个针对某些主题的动态测验 用户可以在每个问题中添加问题和多项选择答案 我如何获得每个问题的每个多项选择答案中每个答案的值 p p
  • PHP比较两个字符串的随机位置

    PHP比较两个字符串 示例我得到了一串数字 1 2 2 1 and another is 2 1 2 1 结果是 true 因为它只是 1 2 2 1 和 2 2 1 1 的位置洗牌 但如果该值为 1 2 2 2 and another i
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 自动检测内部/外部开发环境

    我们使用以下函数来自动检测我们是在内部机器上还是在实时服务器上 然后为各种组件选择适当的配置 function devIsLocal res false http host SERVER HTTP HOST if http host loc
  • 支持通过 OAuth 进行 Facebook/Twitter 身份验证的 CAS 服务器

    我正在寻找一个支持 Facebook Twitter 通过 OAuth 进行单点登录身份验证的 CAS 服务器 我检查过 JASIG CAS 服务器 但它看起来不支持它们 我的 java web 应用程序基于 Spring Security
  • PhpPresentation imagecreatefromstring():数据不是可识别的格式 - PHP7.2

    我正在尝试使用 PhpPresentation 来阅读sample pptx使用文档中为读者提供的简单说明进行文件处理 我得到 imagecreatefromstring Data is not in a recognized format
  • Laravel 计划命令一旦启动就停止?

    我已经为 laravel 5 1 项目设置了预定命令 它有效 命令已经启动 但愚蠢的是我没有考虑如何停止它 通常您不想停止它 但该命令正在向数据库表中插入近 50 万行 而我只是想确保我可以在不登录服务器的情况下启动它 显然我需要在某个时候
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de

随机推荐

  • 为什么java.nio.files.Path中没有Path构造函数?

    Path 类没有记录的构造函数 但可以通过以下方式创建实例 Paths get 这是FileSystems getDefault getPath 那么有人可以解释这个设计决策吗 有人可以解释这个设计决定吗 这是因为 JSR 203 允许从多
  • ManageUserViewModel 类在哪里?

    我使用 ASP Net MVC 5 EF 6 和 Net 4 5 1 创建了一个项目 在某些时候 我需要更改项目所在的命名空间 从 MyTestProject 更改为 MyRealProject 在整个网站上进行这些更改后 我现在在一些视图
  • 避免贫血域模型 - 一个真实的例子

    我试图理解贫血领域模型以及为什么它们被认为是反模式 这是一个现实世界的例子 我有一个 Employee 类 它有大量的属性 姓名 性别 用户名等 public class Employee public string Name get se
  • WCF 与 Java 兼容吗?

    哪些 WCF 服务协议与 Java 配合得很好 TCP 服务绑定是否可与 java 远程处理 Corba EJB JMS 等 配合使用 作为服务端点公开的 Web 服务又如何呢 这些是否已经针对通用 Java WebServices 堆栈进
  • 如何为特定目录设置open_basedir

    我有一个目录 htdocs unsecured我想限制该目录或其子目录中的任何内容访问该目录之外的任何内容 在哪里以及如何设置open basedir仅适用于此目录 您可以设置open basedir在您的 Apache 配置文件 php
  • 将 git lfs ls-files 与 git ls-files ':(attr:filter=lfs)' 进行比较是否是检测不受 lfs 管理的 lfs 文件的可靠方法?

    我尝试找到一种方法来确定 git 存储库中的文件是否由 git lfs 正确管理 到目前为止 我发现比较结果git lfs ls files and git ls files attr filter lfs 似乎给了我我想要的 Add Ty
  • Ruby 相当于“grep -C 5”来获取匹配周围行的上下文?

    我对此进行了一些搜索 但我一定使用了错误的术语 ruby 是否有办法 grep 查找字符串 正则表达式并返回周围的 5 行 上面和下面 我知道我可以打电话 grep C 5 或者甚至编写我自己的方法 但这似乎是 ruby 拥有的东西 而我只
  • Mac 上的 auctex 和 emacs

    我想要的是能够成功使用 emacs 和 auctex 一些系统信息 ProductName Mac OS X ProductVersion 10 8 5 BuildVersion 12F45 Emacs Version 24 3 9 0 A
  • 如何在 iPad 版 Objective C 中解析 PDF

    我一直在解析 PDF 文件 请指导我如何做到这一点 头文件 PDFViewer h interface PDFViewer UIView CGPDFDocumentRef pdf void drawInContext CGContextRe
  • 如何通过 XSLT 在 Java 中合并 2 个 XML 流

    我想在 Java 中合并 2 个 XML 流 字符串 必须通过 XSLT 我可以更改转换 但问题是 XML 作为字符串出现 有很多例子 但是通过文件 可以在不将它们保存在文件中的情况下完成此操作吗 Thanks 我只知道一种使用自己的实现的
  • c++ max_element 每n个元素

    有没有办法比较每 N 个元素来找到容器中的最大元素并返回索引 使用 STL BOOST 或 其他库 对于每个 N 我的意思是使用 std max element 但将 for 的增加从 first 更改为 first n based on
  • 该算法的名称是什么?它与其他图像重采样算法相比如何?

    这个算法已经在我脑海中存在了很长一段时间 但我找不到任何地方描述它 虽然它是如此简单 但我不可能是唯一一个想到它的人 它的工作原理如下 你从一张图片开始 比如说 7x7px 您需要将其重新采样 例如 5x5px 所以你要做的就是取每个新方块
  • UITextView 和浮动自动更正窗口的位置

    我有一个启用自动更正的 UITextView 视图的高度约为 30 像素 当自动更正启动时 自动更正视图在文本下方几乎不可见 有没有办法控制小自动更正窗口的位置或确保它是顶层 以便它始终可见并且用户可以轻松查看并与之交互 我发现在 UITe
  • Backbone.js 和 requirejs:如何将模型、视图和集合转换为 requirejs 模块?

    我正在使用backbone js开发一个javascript应用程序 也就是说 为了便于开发 我以这种方式构建我的文件 app views L movieRow js L movieDetail js models L movie js L
  • Java 8 构造函数参考的可怕性能和大堆占用?

    我刚刚在我们的生产环境中经历了一次相当不愉快的经历 导致OutOfMemoryErrors heapspace 我将问题追溯到我的使用ArrayList new在一个函数中 验证这实际上比通过声明的构造函数正常创建执行得更差 t gt ne
  • 等待设备时出错:等待模拟器上线 300 秒后超时

    我一直在尝试使用 android studio 2 0 模拟器 但我无法在模拟器上运行我的应用程序 当我运行我的应用程序时 它会显示模拟器 其中包含以下详细信息 哈克斯已启用 Hax ram size 0x800000000 HAx 正在运
  • 如何设置 UIBarButtonItem 的字体大小?

    我找不到自定义标题字体大小的方法UIBarButtonItem 我能想到解决这个问题的唯一方法是将其设置为图像 我想避免这种情况 还有其他建议吗 Objective C NSUInteger fontSize 20 UIFont font
  • 在 Rails 中的 find 中使用 lambda

    我有一个方法可以进行分页查找调用 例如 1 coll paginate all lambda conditions gt status AND expires lt a DateTime now select gt Constants PO
  • 在 BeautifulSoup 中替换文本而不转义

    我想用 BeautifulSoup 中的锚链接包装一些尚未链接的单词 我用这个来实现它 from bs4 import BeautifulSoup import re text replace this string soup Beauti
  • PHPUnit 在运行第一个测试之前进行设置,并在运行最后一个测试之后进行拆除

    我正在尝试使用 PHPUnit 为 php 应用程序实现类似 Django 的测试实用程序 类似 Django 我的意思是在运行第一个测试之前从主数据库创建一个单独的测试数据库 并在运行最后一个测试后将其删除 即使一次运行许多测试用例 测试