2013-07-12 131 views
3

我试图使用doxygen来记录我的单元测试,但我想记录它们与代码而不是在测试头中的行,以减少复制/粘贴错误时进行类似的测试。值得注意的是,我正在使用RTF输出格式。记录单元测试符合代码

/** @brief A method for testing doxygen method documentation 
    * @test 
    *  -#Step 1 
    *  -#Step 2 
    *  -#Step 3 
    */ 
    [TestMethod()] 
    public void DoxygenScratchPadInHeader() 
    { 
     // code that may or may not be in sync with header 
    } 

    /** @brief A method for testing doxygen method documentation 
    * @test 
    */ 
    [TestMethod()] 
    public void DoxygenScratchPadInLine() 
    { 
     /// @par 
     ///  -# Initialize the value to 0 
     int i = 0; 

     /// @par 
     ///  -# Add a number 
     i += 3; 

     /// @par 
     ///  -# Assert that the number is three 
     Assert.AreEqual(3, i); 
    } 

测试列表输出:

会员UpdateProtocolQATests.CUpdateProtocolTest.DoxygenScratchPadInHeader()

  1. 步骤1
  2. 步骤2
  3. 步骤3

会员UpdateProt ocolQATests.CUpdateProtocolTest.DoxygenScratchPadInLine()

{注意这里没有台阶}

功能描述输出:

空隙UpdateProtocolQATests.CUpdateProtocolTest.DoxygenScratchPadInHeader()

一种用于测试doxygen的方法的文档的方法。 测试:

  1. 步骤1
  2. 步骤2
  3. 步骤3

空隙UpdateProtocolQATests.CUpdateProtocolTest.DoxygenScratchPadInLine()

一种用于测试doxygen的方法的文档的方法。 测试:

1. Initialize the value to 0 


1. Add a number 


1. Assert that the number is three 

{显示最后一位为代码,因为计算器是纠正重复1. 1. 2. 3 ...这是我真正想要的到底是...}

任何更好的想法来实现在线测试步骤文档?我不太关心没有出现在测试列表中的步骤,我们只能参考这些功能。

+0

有时需要满足监管要求。 FDA不专注于理解明确的代码,他们有时希望以段落形式列出所有内容。我的测试不到十行代码,很容易被开发人员理解,但不一定非开发人员。 –

+0

这种模式的评论比代码更多,在我与之合作的医疗设备公司中相当标准。 –

+1

你有一个很好的观点;我想我们都已经读过关于Therac-25的某个或那个点。对于无建树的评论感到抱歉。 – Augusto

回答

0

使用,它支持从内部注释文档生成工具:

Doxygen的具有helpers for perl,这是什么NaturalDocs是写在

+1

客户需要Doxygen。另一个工具不是一个选项。 –

0

我我非常同情你的困境,但据我所知,Doxygen确实是只有设计用于记录特定的代码对象(文件,类,名称空间,变量等),而不是任意代码行。

目前,我能想到的唯一可能性就是要避免这个缺点,即生成包含您想要通过\code command记录的实际代码的注释。

有两种方法我能想到的实现这一点:

  1. 将某种特殊字符串(比如,例如DOXY_INLINE_CODE)在应与一行代码相关联的强力霉素评论。然后编写一个筛选器(请参阅FILTER_PATTERNS)以将此字符串替换为\code <nextline> \endcode,其中<nextline>是筛选器看到的下一行代码。我不确定Doxygen会将这些评论放在哪里,或者他们会如何看待;不幸的是,他们可能很丑陋。 (我不喜欢的一个奇怪的行为是\code命令似乎去掉前导空格,所以你不会得到缩进才能正常工作。)
  2. 编写一个“Doxygen runner”,在调用doxygen之前自动生成.dox文件。这些自动生成的.dox文件将包含从相应的.cpp或其他源文件生成的文档。您可以将各种Doxygen命令用于link back to实际源代码的文档,您也可以在源代码文档中的.dox文档的insert a copy(反之亦然)。

这些都是骇客,你必须用Doxygen捣鼓它才能很好地处理这种情况,但我希望这些建议有所帮助。祝你好运。 (我目前正在做一些类似的工作,让Doxygen很好地记录Google测试,同时也在一个高度监管行业的项目环境中)。

0

我记得在遇到这个问题时,我正在寻找类似的方案我想记录用户测试程序尽可能接近他们相应的单元测试或单元测试组。以下是我们用Doxygen组/子组实施的解决方案的子集。

单独的manual-test.dox文件被定义为创建一个顶级组和几个子组,在该组下面收集特定的手动测试。

/** 
@defgroup manualtest Manual Testing Instructions 
@{ 
This section contains a collection of manual testing... 

@defgroup menutest Menu Tests 

@defgroup exporttest Import/Export Tests 

@} 
*/ 

下面显示了带单元测试文档和手动测试说明的Java单元测试类的示例。

public MenuTests { 
    ... 

    /** 
    * @addtogroup menutest 
    * **Open File Test** 
    * 
    * The purpose of this test is to... 
    * 
    * -# Do something 
    * -# Verify something 
    */ 
    /** 
    * This unit test verifies that the given file can be created via 
    * the File->Open... menu handler. It... 
    */ 
    @Test 
    public void open_file_test() { 
     ... 
    } 

生成的HTML文件将包括手工测试指令页 下模块部分。所述页面将包含如manual-test.dox中给出的标记细节以及用于每个定义的子组的模块页面的链接,诸如菜单测试

菜单测试页面将显示加入到这一 子组中的所有手动单元测试步骤,从而提供可以包括在由参考 作为软件测试计划或用户测试计划的一部分的单独的文件。

唯一需要注意的是,没有办法明确定义将测试说明添加到组中的顺序。在单个类中定义时,按照它们定义的顺序添加它们,并按字母顺序解析多个类。

对于需要更多控制如何收集测试的项目,Doxygen用于创建XML输出。测试用例使用XSLT模板提取并根据需要进行排序,但这是另一个问题。