如何使用 GoogleTest 框架漂亮地打印 QString?

2024-02-26

我将 GoogleTest (GTest) 框架与 Qt5 应用程序结合使用。

每当使用 QString 参数的测试失败时,框架就会尝试打印所有涉及的值。但是,它无法自动处理外部类型(本例中为 Qt5 的 QString)。

QString test = "Test";
ASSERT_EQ(test, "Value");

如何让 GoogleTest 自动漂亮地打印 QString(= 无需每次手动转换它们)?


GoogleTest 指南解释了一般情况下如何进行教授框架 https://de.slideshare.net/ICSinc/webinar-qt-testdriven-development-using-google-test-and-google-mock处理自定义类型。

最后,为了让 GoogleTest 能够使用 QStrings,需要添加以下代码片段:

QT_BEGIN_NAMESPACE
inline void PrintTo(const QString &qString, ::std::ostream *os)
{
    *os << qUtf8Printable(qString);
}
QT_END_NAMESPACE

此代码不得位于测试装置的命名空间中,而必须位于 Qt 命名空间中(或者通常位于定义应漂亮打印的类型的命名空间中)。 此代码还必须可以从您在该特定类型上调用 GoogleTest 断言的所有翻译单元中查看,否则它将不会被使用(请参阅注释)。

As a result GoogleTest now pretty prints QStrings: enter image description here

当然,您也可以添加一些引号以使其更清楚地表明它来自 QString:

*os << "\"" << qUtf8Printable(qString) << "\"";

来源:网络研讨会使用 Google Test 和 Google Mock 进行 ICS Qt 测试驱动开发 https://de.slideshare.net/ICSinc/webinar-qt-testdriven-development-using-google-test-and-google-mock作者:Justin Noel,高级咨询工程师

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

如何使用 GoogleTest 框架漂亮地打印 QString? 的相关文章

  • Qt Creator:如何区分 win32 和 win64

    我必须在 pro 文件中执行类似的操作 win32 LIBS L 3rdparty libusb win32 lib msvc llibusb else win64 LIBS L 3rdparty libusb win32 lib msvc
  • 当我尝试构建 Qt 4.7.1 静态库时,“找不到 -ljscore”

    我尝试从最新的源构建静态 Qt 库 但出现以下错误 usr bin ld cannot find ljscore collect2 ld returned 1 exit status 如何解决这个问题呢 这是 Qt 构建系统中自 4 7 0
  • gtest 和 gmock 有什么区别?

    我试图理解的目的google mock Google 的 C 模拟框架 https github com google googletest blob master googlemock README md 我已经与gtest较早 但我还是
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • Qt - 如何粘合两个窗口并将它们移动在一起?

    就像qmmp Qt 音乐播放器ui设计一样 这两个或三个窗口实际上在同一个窗口中 因为只有一个dock图标 并且这些窗口可以一起移动并相互附着 我看了源码 好像有用QDockWidget 但我真的不知道如何获得它的细节 当您手动移动辅助窗口
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • Qt:如何连接到 SQLite?

    我安装了 SQLite3 解压到 c sqlite 创建了一个数据库 c sqlite mzsales 现在我试图在 QTableView 中显示其内容 QSqlDatabase db QSqlDatabase addDatabase QS
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • 如何使用meta-toolchain-qt5构建Qt(带有QtWebEngine支持)?

    我正在尝试使用构建 Qtmeta toolchain qt5 但是当我通过这样做时poky glibc x86 64 meta toolchain qt5 cortexa7hf vfp vfpv4 neon toolchain 2 0 1
  • Qt 是否已经有了自己的 new 和 delete 运算符?

    我正在使用一个QGraphicsScene小部件并在其上显示一些点QGraphicsRectItem 这意味着要拨打很多电话new addItem 当出现时 并且removeItem delete摆脱未使用的点 当然 对于性能问题 我已经实
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何为 Windows 构建静态 Qt 库并将其与 Qt Creator 一起使用

    我已经下载了以下 Qt 源 http download qt nokia com qt source qt everywhere opensource src 4 7 3 zip http download qt nokia com qt
  • 静态变量中的 qt tr()

    我在 qt 中的翻译方面遇到问题 我的项目中的所有翻译都工作正常 但有一个翻译位于类的静态变量中 相应部分代码如下 头文件类似于这样 typedef struct int type QString problematicString inf
  • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

    我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望

随机推荐

  • Windows Phone 7 WebBrowser 控件吞下操作事件?

    如果我将 WebBrowser 控件放置在任何页面上 该页面将不再响应 WebBrowser 下的操作事件 页面的其他区域工作正常 通过覆盖很容易确认OnManipulationCompleted在页面中 然后将 WebBrowser 控件
  • 用C#解析并执行JS

    我有一个简单的爬虫 可以爬行和搜索页面 但现在我遇到了如何执行和解析该页面的 js 链接的问题 有谁知道如何解析和执行js页面吗 example some url 很容易用 webhtmltoolktit 解析 JAVASCRIPT run
  • OCR 解决方案可以检测数字手写体吗?

    有没有一种解决方案可以很好地书写数字 1 10 我尝试了超正方体 但我只得到垃圾 理想情况下是 OSS 但商业也可以 OpenCV 现在附带手写数字识别 OCR 示例 你可以参考一下 http code opencv org project
  • iPhone核心数据“自动轻量级迁移”

    我正在尝试更新一个实现核心数据存储的应用程序 我正在向其中一个实体添加属性 我将以下代码添加到我的委托类中 NSPersistentStoreCoordinator persistentStoreCoordinator if persist
  • 不用Gforth 就可以编译Gforth 吗?

    当我尝试编译 Gforth 0 7 0 时 出现以下错误 configure make compiling Undefined symbols main referenced from start in crt1 10 6 o ld sym
  • 使用 Monit 监控 Laravel 队列工作线程

    我目前正在考虑从 Supervisor 迁移到 Monit 以监视 Laravel 队列工作人员 主要原因是能够监视 CPU 内存和设置电子邮件警报 据主管说 我必须安装另一个软件包 因为我希望尽快监视其他内容 例如 Redis 或许还有
  • 我的 java 线程占用了多少内存?

    有没有办法找出我的java线程在VM中占用了多少内存 例如 使用堆栈跟踪转储或其他一些方法 Thanks Java 线程使用堆作为共享内存 各个线程都有自己的堆栈 您可以通过 Xss命令行选项 默认为 512KB 但所有其他内存 堆 不属于
  • Symfony 数据库教程代码错误

    我已经成功安装和设置了 Symfony 2 并且一直在遵循文档 我目前正在做http symfony com doc 2 0 book doctrine html http symfony com doc 2 0 book doctrine
  • 跟踪 C++ 内存分配

    我正在寻找一种方法来跟踪 C 程序中的内存分配 我是not对内存泄漏感兴趣 这似乎是大多数工具试图找到的 而是为应用程序创建内存使用情况配置文件 理想的输出是函数名称的大列表加上随时间变化的最大分配字节数 或者更好的是随时间变化的堆的图形表
  • ASP.NET Core 3.0 策略重定向

    我们有这部分代码来控制一些服务高级页面 对于没有高级会员资格的用户 拒绝 方法会重定向到升级页面 该代码在asp NET core 2上运行完美 但在asp NET core 3上失败 context Resource 不再是 Author
  • 多个特定于目标的变量值

    按照文档管理特定于目标的变量值 https www gnu org software make manual html node Target 002dspecific html prog CFLAGS g prog prog o foo
  • 如何在 Flutter 应用中播放 .mp3 文件?

    我写了一个Dart从服务器检索 mp3 文件并播放它们的 Web 应用程序 我正在尝试使用 Flutter 编写移动版本 我知道dart web audio是 Web 应用程序的主要选项 但 Flutter 在我的 SDK 中找不到它 我知
  • 使用 jQuery 在“Enter”上提交表单?

    我有一个 bog 标准登录表单 使用 HTML jQuery 的 AIR 项目上的一个电子邮件文本字段 一个密码字段和一个提交按钮 当我在表单上按 Enter 时 整个表单的内容消失 但表单未提交 有谁知道这是否是 Webkit 问题 Ad
  • 带有结构体参数的 C 函数原型

    我想为一个函数编写一个函数原型 其参数是指向结构体的指针 int mult struct Numbers n 但是 结构 Numbers 定义为 struct Numbers int a int b int c 尚未定义 我应该如何为 mu
  • 什么负责生成默认构造函数?

    如果每个班级都有一个默认构造函数那么谁生成它 编译器还是 JVM 简而言之 编译器将在必要时生成默认构造函数 这绝对是由 Java 到字节码编译器完成的 您可以通过检查适当的 class文件使用javap 您应该看到已插入的构造函数 不过我
  • 证书错误:主机名不匹配

    我正在使用代理 位于公司防火墙后面 来登录 https 域 SSL 握手似乎进展不顺利 CertificateError hostname ats finra org 443 doesn t match ats finra org 我正在使
  • 如何处理 Agda 不确定是否在 with 语句中生成构造函数的情况?

    我有以下代码 open import Data Nat open import Agda Builtin Char open import Data Maybe digit Maybe digit n with compare n prim
  • 如何通过 Apache HTTP 服务器让 Vaadin Push 工作?

    我正在尝试让 Vaadin 7 1 5 Push 在 Apache Tomcat 7 0 42 Apache HTTP 服务器 带有 mod proxy wstunnel 的 2 2 14 上工作 当我直接访问 Tomcat 时 即 使用
  • Android 上支持 React Native 的 onScroll、onScrollEndDrag、onScrollBeginDrag 吗?

    我有几个简单的console log中的陈述onScrollBeginDrag onScroll and onScrollEndDrag附于一个ScrollView 我可以看到它们在我的 iOS 设备上按预期工作 但在 Android 模拟
  • 如何使用 GoogleTest 框架漂亮地打印 QString?

    我将 GoogleTest GTest 框架与 Qt5 应用程序结合使用 每当使用 QString 参数的测试失败时 框架就会尝试打印所有涉及的值 但是 它无法自动处理外部类型 本例中为 Qt5 的 QString QString test