如何嵌入实时单元测试函数的主体作为 Doxygen 的示例用法

How to embed the body of a live unit test function as example usage with Doxygen?

本文关键字:Doxygen 用法 主体 何嵌入 实时 单元测试 函数      更新时间:2023-10-16

我想嵌入一个实时单元测试函数的主体作为示例。

这是一个类似的问题

在doxygen中,我们可以展示示例用法:

    使用
  • @example指令使用整个 .c 文件。
  • 使用@code指令的狙击手
  • 不知何故使用 @snippet 指令 + EXAMPLE_PATH(无法让它工作(

@example不起作用,因为我没有每个 c 文件只有一个单元测试。 我的测试文件中有一堆单元测试,它们被组织成函数。

@code意味着我必须编写一些不会被编译或实际执行的代码。 (在Python中,有doctests——这与我正在寻找的相反,因为doctests实际上可以作为单元测试执行。 这样的东西在这里会很好。

@snippet可能有效。看起来我们会装饰单元测试,并将其制作成一个片段。 我无法让这个工作。(见下文(

下面是一个示例:

/**
 * @brief Sets the values to zero
 *
 */
void set_to_zero(my_type_t *t)
{
    t->x = 0;
    t->y = 0;
}

。在另一个 test_suite_1.c 文件中,我有很多单元测试。 这是一个...

int test_set_to_zero()
{
    my_type_t t;
    set_to_zero(t);
    MYASSERT(t.x == 0);
    MYASSERT(t.y == 0);
}

我希望这个单元测试,来自我的 test_suite_1.c 文件(不是整个文件中的所有单元测试(出现在文档中,作为此特定函数的示例用法。

我想这样做的原因是我可以继续练习 DRY。 单元测试本质上是基本用法的一个很好的例子。

有没有像这样的指令:@embed_function_body_here<test_set_to_zero>

回到@snippet. 正如我所说,它没有用。 以下是我尝试对@snippet指令执行的操作:

我的单元测试位于 \test 文件夹中。 有单独的.c文件包含单元测试(例如test_suite_1.c,test_suite_2.c等

。在test_suite_1...

//! [Zero Test]
int test_set_to_zero()
{
    my_type_t t;
    set_to_zero(t);
    MYASSERT(t.x == 0);
    MYASSERT(t.y == 0);
}
//! [Zero Test]

。在regular_code...

/**
 * @brief Sets the values to zero
 * @snippet testtest_suite_1.c Zero Test
 *
 */
void set_to_zero(my_type_t *t)
{
    t->x = 0;
    t->y = 0;
}

。在多克西文件中...

...
EXAMPLE_PATH = test
EXAMPLE_RECURSIVE = YES
...

这整个@snippet努力是行不通的。 生成的 html 中不会显示代码段应该在的位置。

请注意,错误说它正在寻找[Zero Test.],而不是[Zero Test]。 这是因为您的摘要实际上是简报的一部分,无论您是否放置简报,看起来简报都会自动以.终止。

该代码段实际上是在[Zero Test.]寻找标记;如果你把.放在标记中,它实际上会起作用。 但是您的解决方案更好,只需终止简报即可!:)

老实说,是你的评论导致我解决了这个问题(我也有(; 010110110101是对的,你应该为此获得荣誉。