捕获测试用例顺序

2024-04-17

我可以保证多个的执行顺序吗TEST_CASEs with Catch https://github.com/philsquared/Catch?我正在使用 LLVM 测试一些代码,它们有一些我需要显式初始化的卑鄙的全局状态。

现在我有一个这样的测试用例:

TEST_CASE("", "") {
    // Initialize really shitty LLVM global variables.
    llvm::InitializeAllTargets();
    llvm::InitializeAllTargetMCs();
    llvm::InitializeAllAsmPrinters();
    llvm::InitializeNativeTarget();
    llvm::InitializeAllAsmParsers();
    // Some per-test setup I can make into its own function
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile(...));
    CHECK_NOTHROW(Compile...));
    CHECK_NOTHROW(Interpret(...));
    CHECK_THROWS(Compile(...));
    CHECK_THROWS(Compile(...));
}

我想要的是将其重构为三个TEST_CASE,

  • 一个用于应该通过编译的测试,
  • 一个用于应该失败的测试,以及
  • 一个用于应该通过解释的测试(并且在未来,也许会进一步进行这样的划分)。

但我不能简单地将测试内容移动到另一个TEST_CASE因为如果那样的话TEST_CASE在设置不方便的全局变量之前调用,那么它们将不会被初始化并且测试将虚假地失败。


我有点晚了,因为我刚刚看到它 - 抱歉(将来您可以将 Catch 相关问题发布到赶上论坛 https://groups.google.com/forum/?fromgroups#!forum/catch-forum或问题列表GitHub http://catch-lib.net, 如果合适的话。

无论如何 - 我不知道你最后做了什么,但在这种情况下,听起来你只是想将每组断言分组为SECTIONs.

TEST_CASE() {
    // Initialize really shitty LLVM global variables.
    llvm::InitializeAllTargets();
    llvm::InitializeAllTargetMCs();
    llvm::InitializeAllAsmPrinters();
    llvm::InitializeNativeTarget();
    llvm::InitializeAllAsmParsers();

    SECTION( "should pass compilation" ) {
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile(...));
      CHECK_NOTHROW(Compile...));
    }
    SECTION( "should pass interpretation" ) {
      CHECK_NOTHROW(Interpret(...));
    }
    SECTION( "Should fail compilation" ) {
      CHECK_THROWS(Compile(...));
      CHECK_THROWS(Compile(...));
    }
}

然后,每个部分就像一个嵌入式测试用例(整个测试用例从头开始执行 - 通过所有初始化 - 对于每个部分)。因此,如果其中一个无抛出异常,它不会阻止其他部分的执行。

...除非初始化代码应该只执行一次 - 在这种情况下,您可以放入静态初始化程序,如@paddy建议的那样(一个在其构造函数中调用初始化程序的类 - 然后只需创建一个全局实例) - 或者您可以使用静态布尔值上的 if 来保护初始化代码块。

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

捕获测试用例顺序 的相关文章

随机推荐

  • 获得令牌后如何从 Google Plus API 获取电子邮件地址

    我使用 oauth2 0 获得了 accesstoken 我能够获取人名 性别等 但无法获取用户的电子邮件地址 任何人都可以粘贴一些示例代码或任何有关如何从 google plus API 获取电子邮件地址的建议吗 如果用户明确授权您的应用
  • 匿名函数 C++

    我正在尝试使用该功能signal int void int from
  • 在 Emacs Lisp 中检查字符串是否以后缀结尾

    是否有一个函数可以检查字符串是否以某个子字符串结尾 Python 有endswith http docs python org 2 library stdtypes html highlight endswith str endswith
  • 如何在 Flask-Login 中实现 user_loader 回调

    我正在尝试使用 Flask 和Flask 登录 http packages python org Flask Login在 Flask 应用程序中实现用户身份验证的扩展 目标是从数据库中提取用户帐户信息 然后登录用户 但我遇到了困难 但是
  • jquery contenteditable 换行符

    我有一个内容可编辑区域 我正在尝试禁用输入 返回和移动输入来创建新段落 我使用下面的脚本进行此操作 但它同时禁用了所有按钮 我想做的是返回放置一个换行符 而不是转到一个新段落 content keypress function e retu
  • 如何编写行为类似于内置断言的自定义 PHPUnit 断言?

    我如何编写自定义断言 例如assertFoo expected actual 其行为类似于关于错误 堆栈跟踪 的内置断言 我目前定义了以下方法 在扩展的类中 PHPUnit Framework TestCase public static
  • SQL Server 存储过程中的返回值

    我有一个存储过程 其中有一个 if 语句 如果计数的行数大于0 则应设置唯一的输出参数 UserId to 0 但是它只返回查询第二部分的值 EmailAddress varchar 200 NickName varchar 100 Pas
  • 重新加载表单时如何保留文本框中的值

    我有一个非常简单的 vba 宏应用程序 由 2 个文本框和命令按钮组成 这个想法是用户需要在文本框中输入数值 然后单击按钮将其禁用 这样他们就无法更改该值 当表单重新加载时 数值会丢失 我必须重新输入另一个值 我想要的是当表单重新加载时 数
  • Sequelize 如何查找具有多个 where 子句和时间戳的行 > NOW()

    我该如何使用 Sequelize 来做到这一点 SELECT FROM sessions WHERE user id AND token AND expires gt NOW 这就是我想要做的 假设Session是一个 Sequelize
  • 将值添加到列表

    下面是我的代码 List
  • Twitter Bootstrap - row-fluid 的位置问题

    我目前正在使用 Twitter bootstrap 构建一个网站 这太棒了 我的布局使用 div class row div class span6 div div class span6 div div class span6 div d
  • 为什么调用 BitBlt 或 CopyRect 时会失去透明度?

    Problem 我正在尝试从 32x32 块复制TBitmap into a TPaintbox这是我的地图编辑器 但我似乎无法使透明度正常工作 见下图 注意 出于演示和测试的目的 我在 TPaintbox 下方放置了一个 TImage 这
  • Java 中什么时候必须有默认构造函数和参数化构造函数?

    很多时候我遇到一个异常 说 默认构造函数的实现丢失 很多时候 参数化构造函数的定义本身就可以完成所有工作 我想知道在什么条件下会发生这种情况 如果类中不存在构造函数 则在编译时添加一个默认构造函数 如果类中存在任何一个参数化构造函数 则在编
  • WordPress 迁移中主页未加载,所有其他页面均加载

    似乎还没有人遇到过这个问题 我刚刚将一个小型 WordPress 网站从 iPage 上的测试服务器空间迁移到 HostGator 上的客户端服务器 当我在新服务器上登录 WordPress 时 该网站显示正常 但如果我清除缓存并继续运行一
  • 无法调试 Android 应用程序

    我尝试在模拟器和设备上调试 Android 应用程序 但我总是收到消息 等待调试器 等待调试器附加到进程 我真的不知道如何设置环境和应用程序来运行调试 如果你们中的任何人能够提供任何有用的提示 我将非常感激 问题出在主机配置文件中 C Wi
  • 插入事务和参数?

    我正在学习 VB Net 需要使用开源 System Data SQLite ADO Net 解决方案来处理 SQLite 数据库 我在 HOWTO 部分找到的示例仅是 C 语言的 有人可以在 VB Net 中提供一个简单的示例吗 我可以研
  • 塔楼高度之间的最小差异?

    我正在做一些面试问题 我看到了这个 已知 n 座塔的高度和 k 值 您必须将每个塔的高度增加或减少 k 您需要最小化最长和最短塔的高度之间的差异并输出该差异 我想答案将是 maxheight k minheight k 我已经尝试过一些测试
  • 如何禁用 Android Oreo 中用于 espresso 测试的新自动填充功能

    在 Android 设备上运行测试sdk 26导致他们因为新的失败Autofill https developer android com guide topics text autofill html当 espresso 尝试单击字段时隐
  • 如何在rails中使用动态绑定执行原始更新sql

    我想执行一个更新原始 SQL 如下所示 update table set f1 where f2 and f3 这条 SQL 将被执行ActiveRecord Base connection execute 但我不知道如何将动态参数值传递到
  • 捕获测试用例顺序

    我可以保证多个的执行顺序吗TEST CASEs with Catch https github com philsquared Catch 我正在使用 LLVM 测试一些代码 它们有一些我需要显式初始化的卑鄙的全局状态 现在我有一个这样的测