【问题标题】:Organization of UnitTests in a existing library ProjectGroup现有库 ProjectGroup 中的单元测试组织
【发布时间】:2011-02-15 08:52:44
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: delphi unit-testing delphi-2007


    【解决方案1】:

    有一个鲜为人知的 DUnit feature 支持从 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 并在同一会话中运行它们。

    【讨论】:

    • 这对我来说也是新的!感谢更新。我想 DUnit2 也有同样的可能性?
    • 与我的同事讨论这个问题时,我们甚至想到了为我们库中的每个 .bpl 创建测试 .bpl,以及可以将 .bpl 作为插件加载的通用“RunTests.exe”在可执行文件中
    • 天哪,这太棒了!我希望我很久以前就知道了 :-) 希望我能做的不止是 +1
    • @Bascy 是的,此功能在分叉之前可用。 DUnit2 在宣传它方面做得更好。我不确定他们是否改进了它,因为我还没有尝试过 DUnit2。
    【解决方案2】:

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

    1. 所有单元测试,按 BPL 分组。
    2. 每个 BPL 的每个单元测试的项目。
    3. 一个包含所有测试的项目。

    您可以在持续集成系统中使用最终项目,而前者用于测试尚未签入的内容。

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

    --杰罗恩

    【讨论】:

    • 我们甚至没有考虑过两者都做 :-) 但它确实有它的优势。但最大的缺点当然是新创建的 Unittest 可能不会添加到 integrationTest 套件中。
    • @Bascy 因为你需要定期观察单元测试覆盖率,例如使用这里的工具:stackoverflow.com/questions/531546/…
    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2012-12-25
    • 2010-11-22
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多