【问题标题】:Equivalent to Python DocTest in Delphi?相当于 Delphi 中的 Python DocTest?
【发布时间】:2012-04-06 08:24:27
【问题描述】:

Delphi 是否有任何等效的 DocTest。我使用 DUnit,但我喜欢 Python DocTest 的想法。我看到了一些像here 这样的答案,但我认为,对于简单的功能,像 DocTest 这样的可能没问题。 我的目标是在编写函数时在注释标题中定义我的测试。 喜欢:

function Plus(i1, i2 : integer) : integer;
//>>> Check( Plus(1, 3) = 4)
begin
  result := i1 + i2;
end;

【问题讨论】:

  • 我从来没有在 Delphi 遇到过这样的事情。由于 Python 的动态特性,它在 Python 中要容易得多。
  • 不完全一样,但在最近的博客中,Jordi Corbilla 提出了使用TCustomAttributes 进行单元测试的想法。见dunit-and-tcustomattributes。它们不是在 cmets 中添加测试,而是作为属性应用。
  • @LURD 这篇不错的文章是相关的,但是还是有很多代码要写:属性必须有一组固定的参数。
  • Delphi 是一种静态类型语言,因此使用 dUnit 或类似的静态类型代码和单元测试可能会占用多行代码。 Python 因其动态特性而易于使用 1 行,而 delphi 则不然,扼杀了这个概念。即使在 python 中,真正的单元测试也比这个概念更好。
  • @WarrenP 我不明白。在 DUnit 中,你有“单行”测试,不是吗?

标签: python delphi doctest dunit


【解决方案1】:

想法是您可以使用“控制台”将一些结果输出到测试代码,然后将输出文本内容与预期值进行比较。

regression tests available with the great DWSScript Open Source project 为例。您会发现一些 .pas 文件和一些相关的 .txt 文件。

比如abs.pas:

var vf = 1.5;
var vi = 2;

var i : Integer := Abs(-vi);
PrintLn(i);
PrintLn(Abs(vi));

var f : Float := Abs(-vf);
PrintLn(f);
PrintLn(Abs(vf));

以及对应的abs.txt内容:

2
2
1.5
1.5

AFAIK 目前还没有现有的解决方案集成到 Delphi 世界中。

在注释中编写测试将缺少 IDE 自动完成功能,并且在某种程度上破坏了对象 pascal 设计。使用 DWS 会很容易,但需要调用命令行 Delphi 编译器。老实说,我看不出拥有自己的一组专门用于测试的单元有什么问题。带有固定值和随机值的for..to 循环的一小段代码将比一组固定参数具有更好的测试覆盖率。

【讨论】:

  • 你好阿诺。我的问题不是“如何将结果发送到控制台”,而是“如何在函数头 cmets 中编写测试脚本”。我将编辑我的问题...
  • @Arnaud 我很难看出这与 Python doctest 有什么相似之处,但也许我遗漏了一些东西。
  • @philnext 这不是一个真正的控制台,而是一个虚拟控制台,用于测试目的。您可以在函数头 cmets 中编写内容,然后使用 DWS 运行它(如果是 DWS)。但当然,您需要编译测试源代码(使用 dcc.exe)。有关提取标头的源解析器,请参见例如the castalia parser.
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
相关资源
最近更新 更多