delphi - Free Pascal 和 Delphi 的单源单元测试

标签 delphi unit-testing freepascal dunit

有没有一种方法可以编写单元测试,以便可以使用 Delphi 和 Free Pascal 编译和运行它们?

Delphi 和 Free Pascal 有不同的单元测试框架,这会导致针对这两种编译器的开发人员(例如库和框架开发人员)进行重复工作。

所以也许有一种方法,使用 DUnit 或 FPCUnit 框架并调整测试用例源代码(或框架本身),以便它也可以与其他编译器一起使用。

所以本质上问题是:

  • 哪个框架(DUnit 或 FPCUnit)可以使用两种编译器(Delphi 和 Free Pascal)进行编译,并且修改尽可能少?

  • 是否有第三个框架(感谢 Arnaud 提到 TSynTest)可以与 Delphi 和 FPC 配合使用?

最佳答案

查看此very nice blog article - 关于 FPCUnit 测试的新鲜内容。

简而言之,据我所知,如果你compare to DUnit :

  • 大多数 Check*() 方法已重命名为 Assert*();
  • SetUp/TearDown 方法在两个框架中均按每个函数调用;
  • 其他一些人的想法可能会有所不同。

因此,我认为通过在 FPCUnit 实现上创建一个小型包装类,让 FPCUnit“模仿”DUnit 可能很容易,从而具有与 DUnit 完全相同的方法。因此,您可以在两个目标之间共享代码,甚至可以重用现有的 DUnit 测试。恕我直言,这样的包装类比使用此处建议的 {$ifdef FPC} 方便得多。条件编译往往会使代码难以调试、冗长、冗余,因此应仅在必要时使用。

另一个潜在的解决方案可能是使用其他测试框架。我们的小TSynTest classes更轻,但我目前正在将框架转换为 FPC。因此两个编译器可以使用完全相同的代码。它具有一些我在 DUnit/FPCUnit 中会错过的功能(例如带有精分割析的可选日志记录以及失败时的完整堆栈跟踪)。它没有 GUI 也没有向导,但老实说,作为我的程序员,我更喜欢纯文本,我可以轻松地将其包含在我的技术发布文档中,以证明没有发生回归。

关于delphi - Free Pascal 和 Delphi 的单源单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204224/

相关文章:

delphi - 在 Delphi 中通过 RJ12 发送信号

Delphi 'private' 子句(指令)不起作用

c# - Moq第一次和第二次返回不同的值

angularjs - 测试 ui.router $stateChangeSuccess

delphi - 如何在已编译的项目中隐藏标识符名称?

c# - 我的项目使用什么语言?

delphi - 使用 Indy 检查未读消息

java - 使用 gradle 从 jacoco 测试覆盖范围中删除一些 java 文件

OpenGL 是否足够稳定以支持 24/7 运行程序?

c++ - 将 Python 代码编译为 Pascal DLL