在我们的Delphi2007环境中,我们有一个SGLibrary groupproj,它包含大约30个bpls。我们刚刚开始为这些库创建单元测试,并且不确定组织Unittest项目最方便的方式是什么。
我们倾向于为每个bpl创建一个测试可执行文件,因为这将使编译变得简单快速。可以将test-exe设置为活动项目,并且可以通过设置依赖项来强制编译bpl。运行测试也很容易,即将测试可执行文件设置为bpl的Hostapplication。
但缺点是图书馆地图将会扩展另外30个项目,使其成为一个非常庞大的群体(为什么我们不能在Delpi中制作子群?)。
相反的安排是创建1个测试可执行文件,其中包含所有单元测试,但是会创建一个超过100个单元的可执行文件,并且在运行单个测试之前必须编译许多依赖项。 / p>
所以我的问题......是否有人就如何将其组织成可管理且快速运行的设置有任何建议,最佳实践或其他想法?
额外考虑:我们希望能够立即运行所有测试,当然,将所有测试放在一个可执行文件中会更容易。
答案 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)
我可能会同时做到这两点,所以你最终得到了这个:
您可以在持续集成系统中使用最终项目,使用前者来测试尚未签入的项目。
这确实是大量的项目,是您为提高代码质量而付出的代价。
- 的Jeroen