记录谷歌测试

van*_*nna 9 c++ doxygen googletest c-preprocessor

我最近开始使用谷歌测试来帮助我测试程序.它运作良好,但现在我的测试用例正在增长......

#include <gtest/gtest.h>

TEST(MyTest, FirstTest) {
    // stuff
};

TEST(MyTest, SecondTest) {
    // stuff
};

TEST(MyTest, ThirdTest) {
    // stuff
};

int main(int argc, char* argv[]) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
};
Run Code Online (Sandbox Code Playgroud)

我想为我的所有测试创建一个很好的自动生成的文档,这些文档将与我的程序文档分开.出于这个目的,我通常使用doxygen,但谷歌测试使用宏,目前还不清楚doxygen如何处理.更准确地说,我们有

#define TEST(test_case_name, test_name)\
  GTEST_TEST_(test_case_name, test_name, \
             ::testing::Test, ::testing::internal::GetTestTypeId())
Run Code Online (Sandbox Code Playgroud)

我试过了

/** 
* @def TEST(MyTest, FirstTest)
* @brief My first test
*/
TEST(MyTest, FirstTest) {
    // stuff
};
Run Code Online (Sandbox Code Playgroud)

但它不会在doxygen上产生任何输出......

Rob*_*edy 8

你正在使用@def,但这是宏定义的命令.该命令后面没有#define语句,因此Doxygen忽略它.功能的Doxygen命令是@fn,所以请改用它.

另外请记住,对于Doxygen来记录全局函数,也需要记录封闭文件.

  • 您介意写一个关于如何完成的正确示例吗? (2认同)

πάν*_*ῥεῖ 8

看起来你的问题刚刚回答了Rob Kennedy的回答.但是,我想提供一种完全不同的方法.

我使用RecordProperty()gtest 的方法description在测试日志XML中创建一个额外的属性,并将它作为字符串文字传递给测试方法的简短描述.我创建了一个名为TEST_DESCRIPTION的宏,它应该在任何测试用例中被称为第一个语句:

#define TEST_DESCRIPTION(desc) RecordProperty("description", desc)

TEST(MyTest, SecondTest) {
    TEST_DESCRIPTION("This test does 'stuff'");
    // stuff
};
Run Code Online (Sandbox Code Playgroud)

另外,我有一个简单的XSLT转换,它从XML testlog输出创建一个HTML测试报告并显示该@description属性.

这种方法的一个缺点是,对于禁用的测试,描述属性不会出现,因为RecordProperty()当然不会执行这些测试.

整个事情是在我的老板要求单元测试的测试用例描述时发明的,我不想在单独的工具中描述这些(例如我们有Polarion用于需求分析,你也可以在那里描述测试场景)因为这很可能快速变得不一致

但也许doxygen可以提供额外的好处,因为它能够显示测试方法的调用引用.