10

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

我们已经有了一个持续集成环境 (FinalBuilder),我已经对其进行了更新,在发给我们开发团队每个人的电子邮件中包含了单元测试 (dUnit) 和代码指标 (CodeHealer)。我们的单元测试覆盖率不是很好,所以我现在正尝试将 AQtime 加入到每个构建中的一些测试覆盖率结果中。

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

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

4

2 回答 2

7

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

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

我们的单元测试使用 XmlTestRunner,然后我们可以通过对生成的 XML 文件使用 XPath 查询来了解测试是否失败。

Update: An recent update to FinalBuilder 7.0 now supports DUnit. It's through its own XMLTestrunner.pas, which is under the FinalBuilder Directory after install. This runner outputs the test results in the same format as NUnit. It then integrates really well into FinalBuilder Server.

于 2010-02-25T20:26:52.400 回答
2

您是在描述我们正在慢慢演变的设置。

  • DUnit 测试使用TextTestRunner 单元中定义的TTextTestListener编译为控制台应用程序。
  • 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;
于 2010-02-22T15:08:14.833 回答