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 在运行第一个测试之前进行设置,并在运行最后一个测试之后进行拆除 的相关文章

随机推荐

  • 为什么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 我的意思是在运行第一个测试之前从主数据库创建一个单独的测试数据库 并在运行最后一个测试后将其删除 即使一次运行许多测试用例 测试