Free Pascal和Delphi的单源单元测试

mjn*_*mjn 10 delphi unit-testing freepascal dunit

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

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

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

基本上问题是:

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

要么

  • 有没有第三个框架(感谢Arnaud提到TSynTest)与Delphi和FPC一起工作?

Arn*_*hez 10

看到这篇非常好的博客文章 - 关于FPCUnit测试的新鲜事.

总之,据我所知,如果你与DUnit比较:

  • 大多数Check*()方法都被重命名为Assert*();
  • SetUp/TearDown方法在两个框架中都被称为per-function ;
  • 其他一些想法可能有所不同

因此,我认为通过在FPCUnit实现上创建一个小包装类来让FPCUnit"模仿"DUnit可以很容易地使用与DUnit相同的方法.因此,您可以在两个目标之间共享代码,甚至可以重用现有的DUnit测试.这样的包装类是恕我直言,使用{$ifdef FPC}其他建议在这里更方便.条件编译往往使代码难以调试,冗长,冗余,只应在必要时使用.

另一个可能的解决方案可能是使用其他测试框架.我们的小型TSynTest类更轻,但我目前正在将框架转换为FPC.因此,两个编译器可以使用相同的精确代码.它有一些功能(比如可选的日志记录,有精细的分析,以及完整的堆栈故障),我很想念DUnit/FPCUnit.它没有GUI也没有向导,但老实说,作为程序员,我更喜欢纯文本,我可以轻松地在技术发布文档中包含,以证明没有发生回归.


klu*_*udg 7

Free Pascal的默认单元测试框架是FPCUnit,它与DUnit具有相同的设计,但在细节方面与它不同.您可以通过规避差异来为FPCUnit和DUnit编写常见的单元测试{$IFDEF FPC}.我刚刚测试了FPCUnit,它是一个可用的框架,并在博客上发表了它.