c++ - 使用 Google Test 测试文件输出?

标签 c++ unit-testing googletest

我正在从事一个用 C++ 创建模拟器(用于模拟生物系统)的项目。模拟器获取参数的输入文件,然后在模拟的不同时间点生成包含数百个分子计数的输出文件。我正在使用 Google Test 进行所有单元测试。我还想包括一些更高级别的测试,我在其中提供具有各种模型参数的输入文件,然后检查输出文件是否与某个引用文件匹配。有人建议使用 bash-tap 进行这些更高级别的测试,但如果可能的话,我更愿意坚持使用 Google Test。是否可以使用 Google Test 进行我在此处描述的更高级别的测试?

最佳答案

我们编写 CAE 软件(模拟器)并使用 Google Test。我们面临着类似的问题,希望您能找到切实可行的答案。

您可以编写更高级别的测试,但您通常需要做的不仅仅是“EXPECT_EQ()”来检查通过/失败。例如,如果您必须测试两个任意图的连通性,如果允许算法改变节点的顺序,则可能会很困难。或者,如果您正在比较矩阵,有时您会遇到可以毫无问题地切换矩阵行和列的情况。也许舍入误差是可以的。准备好处理这些类型的问题,因为与单元测试相比,它们在完整模拟器中的问题要严重得多。

一个更实际的问题是当您的组织说“在您 checkin 之前运行所有测试”。或者,也许它们会在您每次点击构建按钮时运行。如果是这种情况,您需要将这些单元测试与更高级别的测试区分开来。我们在 Visual Studio 中使用 Google Test Runner,它期望运行文件名为“*Test*”的所有内容。最好为更高级别的测试命名,以便清楚。

我们还必须将整个可执行文件转换为 DLL,以便可以在其上运行测试。还有其他方法(如脚本)可以与 Google Test 一起使用,但我们发现可执行文件作为 dll 方法可以工作。我们“真正的”产品可执行文件只是一个调用 dll 中的 app_main() 的 main() 函数。

还有,使用 Runner 时的最后一个提示:如果您的应用获得 --gtest_list_tests 参数,请不要进行大量昂贵的设置:

// Don't run if we are just listing tests.
if (!::testing::GTEST_FLAG(list_tests))
{
        // Do expensive setup stuff here.
}

int result = RUN_ALL_TESTS();

if (!::testing::GTEST_FLAG(list_tests))
{
        // Do expensive shutdown stuff here.
}

关于c++ - 使用 Google Test 测试文件输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36026782/

相关文章:

c++ - 是否可以使用 googletest 在基类中定义(纯虚拟)测试用例

unit-testing - 如何使用 gtest_main 库和 Jam 构建 googletest 单元测试?

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 如何从 Init 强制 gtest 将报告写入 xml

c++ - 跨线程的 sigslot 信号

java - Junit 测试空方法

spring - 测试报告被覆盖

javascript - 使用 QUnit/Sinon 测试 window.onerror

C++ 字符串溢出

c++ - 对于 xlcAlert,最后一个参数是做什么用的?