使用FinalBuilder和AQTime获取DUnit测试覆盖率统计数据

时间:2010-02-21 23:54:55

标签: delphi unit-testing finalbuilder dunit aqtime

我们有一个庞大的Delphi项目(150万行代码),我们正在转向使用敏捷流程。

我们已经有了一个连续的集成环境(FinalBuilder),我已将其更新为包含单元测试(dUnit)和代码指标(CodeHealer)的电子邮件给我们开发团队中的每个人。我们的单元测试覆盖率并不高,所以我现在正试图将AQtime纳入混合,以便在每次构建时获得一些测试覆盖率结果。

我正在使用“执行程序”任务来运行单元测试可执行文件,记录结果并在之后解析文件。我打算使用“运行脚本”任务来运行AQtime(通过COM)并将结果导出到XML,以便我可以解析这些结果。

我遇到的问题是AQtime运行单元测试可执行文件,我失去了直接监视单元测试可执行文件的能力。我想让FinalBuilder解析两个任务的结果。当有人从AQtime调用时,有没有人知道如何访问dUnit结果?

2 个答案:

答案 0 :(得分:7)

我们跑了同样的路径,我们没有从AQTime运行DUnit测试,

相反,我们使用FinalBuilder构建并运行我们的Dunit测试。

我们的单元测试使用XmlTestRunner,然后我们就可以知道了 测试失败或不太容易在生成的XML文件上使用XPath查询。

更新:最近对FinalBuilder 7.0的更新现在支持DUnit。它是通过自己的XMLTestrunner.pas,安装后在FinalBuilder目录下。 该跑步者以与NUnit相同的格式输出测试结果。然后它很好地集成到FinalBuilder服务器中。

答案 1 :(得分:2)

您正在描述我们正在慢慢发展的设置。

  • 使用TextTestRunner单元中定义的 TTextTestListener 将DUnit测试编译为控制台应用程序。
  • CI服务器是一个cmd脚本,用于构建所有项目并执行所有测试。
  • 测试的输出通过管道传输到文件。

解决方案可能是让AQTime对这些控制台应用程序进行配置文件,同时仍然能够将结果通过管道传输到以后可以解析的文件中?!

另一个解决方案可能是实现您自己的TestListener对象,并让该对象将测试结果直接写入事件日志,直接写入日志文件,数据库或任何您喜欢的地方,并由FinalBuilder接收。

而不是在项目文件中有这样的东西

  Application.Initialize;
  if System.IsConsole then TextTestRunner.RunRegisteredTests
  else GUITestRunner.RunRegisteredTests;

它会变成这样的

  Application.Initialize;
  if System.IsConsole then OurEventLogTestRunner.RunRegisteredTests
  else GUITestRunner.RunRegisteredTests;