使用Google Test测试文件输出?

时间:2016-03-16 04:26:27

标签: c++ unit-testing googletest

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

1 个答案:

答案 0 :(得分:2)

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

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

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

我们还必须将整个可执行文件转换为DLL,以便可以在其上运行测试。还有其他方法(如脚本)可以与Google Test一起使用,但我们已经找到了可执行的as-a-dll方法。我们的“真正的”产品可执行文件只是一个main()函数,它调用dll中的app_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.
}