10

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

#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();
};

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

#define TEST(test_case_name, test_name)\
  GTEST_TEST_(test_case_name, test_name, \
             ::testing::Test, ::testing::internal::GetTestTypeId())

我试过

/** 
* @def TEST(MyTest, FirstTest)
* @brief My first test
*/
TEST(MyTest, FirstTest) {
    // stuff
};

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

4

2 回答 2

10

显然,您的问题刚刚得到了 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
};

此外,我还有一个简单的 XSLT 转换,它从 XML 测试日志输出创建 HTML 测试报告并显示此@description属性。

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

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

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

于 2012-08-21T17:35:30.610 回答
8

您正在使用@def,但这是宏定义的命令。该命令后面没有#define语句,因此 Doxygen 忽略它。函数的 Doxygen 命令是@fn,因此请改用它。

还要记住,要让 Doxygen 记录全局函数,也需要记录封闭文件。

于 2012-08-21T17:33:57.600 回答