在现有图书馆项目组中组织单元测试

时间:2011-02-15 08:52:44

标签: delphi unit-testing delphi-2007

在我们的Delphi2007环境中,我们有一个SGLibrary groupproj,它包含大约30个bpls。我们刚刚开始为这些库创建单元测试,并且不确定组织Unittest项目最方便的方式是什么。

我们倾向于为每个bpl创建一个测试可执行文件,因为这将使编译变得简单快速。可以将test-exe设置为活动项目,并且可以通过设置依赖项来强制编译bpl。运行测试也很容易,即将测试可执行文件设置为bpl的Hostapplication。

但缺点是图书馆地图将会扩展另外30个项目,使其成为一个非常庞大的群体(为什么我们不能在Delpi中制作子群?)。

相反的安排是创建1个测试可执行文件,其中包含所有单元测试,但是会创建一个超过100个单元的可执行文件,并且在运行单个测试之前必须编译许多依赖项。 / p>

所以我的问题......是否有人就如何将其组织成可管理且快速运行的设置有任何建议,最佳实践或其他想法?

额外考虑:我们希望能够立即运行所有测试,当然,将所有测试放在一个可执行文件中会更容易。

2 个答案:

答案 0 :(得分:3)

有一个鲜为人知的feature DUnit支持从dll运行测试。你基本上创建了一个没有自己测试的dunit exe项目,而是从dll加载测试。

每个dll都需要导出一个函数:

library MyTests;

uses
  TestFramework{, add your test units};

function Test: ITest;
begin
  result := RegisteredTests;
end;

exports
  Test;     
end;

然后您只需将测试用例添加到dll中。测试会自动注册到每个单元的初始化部分。

恕我直言,遗憾的是,这并没有被提升为与DUnit合作的标准方式。大多数其他语言的单元测试框架都是以这种方式组织的。它们提供单个测试运行程序可执行文件,可从任意数量的可加载模块动态加载测试用例。

除了让您分解测试以便于组织外,它还允许您在多种情况下运行相同的测试。也许您希望使用不同的编译器选项为您的调试和发布版本(甚至不同版本的编译器)运行测试,这样您就可以更加确信代码的行为一致。您可以从同一个源构建多个dll并在同一会话中运行它们。

答案 1 :(得分:2)

我可能会同时做到这两点,所以你最终得到了这个:

  1. 所有单元测试,按BPL分组。
  2. 每个BPL的每个单元测试的项目。
  3. 包含所有测试的项目。
  4. 您可以在持续集成系统中使用最终项目,使用前者来测试尚未签入的项目。

    这确实是大量的项目,是您为提高代码质量而付出的代价。

    - 的Jeroen