JUnit测试报告丰富了JavaDoc

时间:2011-11-10 18:51:57

标签: java unit-testing junit automated-tests integration-testing

对于客户,我们需要为集成测试生成详细的测试报告,这些测试报告不仅显示一切都是绿色的,还包括测试的内容。我和我的同事是懒惰的人,我们不想破解电子表格或文本文档。

为此,我想到了一种方法,可以在每个@Test注释方法和每个测试类上使用JavaDoc注释来记录更复杂的集成测试。对于测试人员来说,查看哪些需求,Jira票证或测试链接到的任何内容以及测试实际尝试的内容都是一个很好的帮助。我们也想向客户提供这些信息。

现在最大的问题是:我们如何将每个方法和每个测试类的JavaDoc放入JUnit报告中?我们使用JUnit 4.9和Maven。

我知道,每个assertXXX()都有一个描述,但是我们真的需要一个很好的HTML列表作为结果或一个PDF文档列出所有类和文档,下面是所有@Test方法及其描述,测试时间,结果和失败的原因。

或者是否有其他替代方法可以生成花哨的测试脚本? (或者我们应该在这个上开始一个OpenSource项目!?;-))

更新 我问了另一个关于如何向Eclipse添加RunListener以使其在Eclipse启动时也在Eclipse中报告的问题。使用自定义TestRunner的建议解决方案是另一种获得测试结果报告的可能性。看看:How can I use a JUnit RunListener in Eclipse?

6 个答案:

答案 0 :(得分:22)

实现这一目标的一种方法是使用自定义RunListener,但需要注意的是使用注释而不是javadoc会更容易。您需要具有自定义注释,例如:

@TestDoc(text="tests for XXX-342, fixes customer issue blahblah")
@Test
public void testForReallyBigThings() {
    // stuff
}

RunListener侦听测试事件,例如测试开始,测试结束,测试失败,测试成功等。

public class RunListener {
    public void testRunStarted(Description description) throws Exception {}
    public void testRunFinished(Result result) throws Exception {}
    public void testStarted(Description description) throws Exception {}
    public void testFinished(Description description) throws Exception {}
    public void testFailure(Failure failure) throws Exception {}
    public void testAssumptionFailure(Failure failure) {}
    public void testIgnored(Description description) throws Exception {}
}

Description包含应用于测试方法的注释列表,因此使用上面的示例可以使用以下方法获取Annotation TestDoc:

description.getAnnotation(TestDoc.class);

并正常提取文本。

然后,您可以使用RunListener生成所需的文件,使用特定于此测试的文本,测试是通过还是失败,或者是否被忽略,花费的时间等等。这将是您的自定义报告

然后,在surefire中,您可以使用以下命令指定自定义侦听器:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.10</version>
  <configuration>
    <properties>
      <property>
        <name>listener</name>
        <value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value>
      </property>
  </configuration>
</plugin>

这是Maven Surefire Plugin, Using JUnit, Using custom listeners and reporters

这个解决方案的缺点是,就回车符和格式化而言,你没有javadoc的灵活性,但它确实具有文档在一个特定位置的优点,即注释TestDoc。

答案 1 :(得分:5)

你看过Maven Sure-fire报道吗?

您可以从JUnit测试中生成HTML报告。

http://maven.apache.org/plugins/maven-surefire-report-plugin/

我不确定它是如何可定制的。但这是一个很好的起点。

我也知道TestNG(JUnit的替代品)具有一些报告生成功能。 http://testng.org/doc/documentation-main.html#logging-junitreports

我也推荐log4j http://logging.apache.org/log4j/1.2/manual.html

答案 2 :(得分:2)

您可以使用jt-report一个出色的测试报告框架。

答案 3 :(得分:1)

我使用testNG和iText创建了一个程序,它在一个不错的pdf报告中输出测试结果。您可以在@Test标记中添加测试说明,也可以包含在.pdf报告中。它提供了测试的运行时间以及整个套件的运行时间。它目前用于测试使用selenium的webapps,但可以忽略该部分。它还允许您在一次运行中运行多个测试套件,如果测试失败,它允许您重新运行那些测试而无需重新运行整个套件,这些结果将附加到原始结果PDF。如果您有兴趣,请参见下面的图片以获取源代码链接。我不介意这成为一个开源项目,因为我有一个良好的开端,虽然我不知道如何去做。这是一个截图 enter image description here

所以我想出了如何在sourceforge上创建一个项目。这是链接sourceforge link

答案 4 :(得分:0)

如上所述,maven肯定是要走的路。它让生活变得非常轻松。您可以使用m2eclipse插件轻松创建maven项目。一旦完成。只需运行以下命令:

cd <project_dir_where_you_have_pom_file>
mvn site:site

此命令将为您创建样式表。在同一目录中运行:

mvn surefire-report:report

这将运行测试用例并将输出转换为html。您可以在'target / site / surefire-report.html'中找到输出。

以下是摘录。如您所见,所有测试用例(用JUnit编写)都显示在html中。其他元信息,如测试用例总数,成功次数,时间等等,也在那里。

由于我无法上传图片,因此无法向您显示输出。

您可以更进一步,可以提供要使用的插件的确切版本,如

mvn org.apache.maven.plugins:maven-site-plugin:3.0:site org.apache.maven.plugins:maven-surefire-report-plugin:2.10:report

答案 5 :(得分:0)

也许值得一看“可执行规范”/ BDD工具,如FIT / FitNesse,Concordion,Cucumber,JBehave等。

通过这种做法,您不仅可以正式满足客户的要求,而且还可以将透明度提升到新的水平。

简而言之,所有这些工具都允许您(或更好的客户)使用自然语言或表定义场景,定义自然语言结构与实际代码的绑定,并运行这些场景并查看它们是成功还是失败。实际上,你将有一个“实时”规范,它显示已经按预期工作的内容和未实现的内容。

查看有关这些工具的详细讨论: What are the differences between BDD frameworks for Java?