Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在现有库项目组中组织单元测试_Delphi_Unit Testing_Delphi 2007 - Fatal编程技术网

Delphi 在现有库项目组中组织单元测试

Delphi 在现有库项目组中组织单元测试,delphi,unit-testing,delphi-2007,Delphi,Unit Testing,Delphi 2007,在我们的Delphi2007环境中,我们有一个SGLibrary groupproj,其中包含大约30个BPL。我们刚刚开始为这些库创建单元测试,不确定组织单元测试项目最方便的方式是什么 我们倾向于为每个bpl创建一个测试可执行文件,因为这将使编译变得简单而快速。可以将test exe设置为活动项目,并通过设置依赖项强制编译bpl。运行测试也很容易,即通过将测试可执行文件设置为bpl的主机应用程序 但缺点是library groupproject将扩展为另外30个项目,使其成为一个非常大的组(为

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

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

但缺点是library groupproject将扩展为另外30个项目,使其成为一个非常大的组(为什么我们不能在Delpi中创建子组??)

相反的安排是创建一个包含所有单元测试的测试可执行文件,但这将创建一个包含100多个单元的可执行文件,以及在运行单个测试之前必须编译的大量依赖项

所以我的问题是。。。有人对如何将其组织成一个可管理且快速运行的设置有任何建议、最佳实践或其他想法吗


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

我可能会同时执行这两个测试,因此您最终会得到以下结果:

  • 所有单元测试,按BPL分组
  • 每个BPL的每个单元测试的项目
  • 包含所有测试的项目
  • 您可以在持续集成系统中使用最终项目,而前者用于测试尚未签入的内容

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

    --jeroen有一个鲜为人知的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,并在同一个会话中运行它们。

    我们甚至没有考虑同时执行这两个操作:-),但它确实有它的优点。但最大的缺点当然是新创建的单元测试没有添加到integrationTest套件中。@Bascy为此,您需要定期观察单元测试覆盖率,例如使用此处的工具:这对我来说也是新的!谢谢你的更新。我想DUnit2也有同样的可能性?与我的同事讨论这个问题时,我们甚至想到了创建test.bpl的想法,它适用于我们库中的每一个.bpl,以及一个通用的“RunTests.exe”,可以将.bpl作为插件加载到可执行文件中哦,伙计,这太棒了!我希望我很久以前就知道这一点:-)希望我能做得更多+1@Bascy是的,此功能在fork之前可用。DUnit2在宣传方面做得更好一些。我不确定他们是否改进了,因为我还没有尝试DUnit2。