如何测试函数和过程,因为它们不属于Delphi中的类?

时间:2011-06-14 11:19:27

标签: delphi unit-testing testing dunit

我在一个名为Utils.pas的旧单元中有几个小函数。

现在我想重构一些,但我认为最好先编写测试。有了DUnit,我认为没有课程就不可能。

所以我想知道如何在重构之前测试它们?

修改

我认为这是不可能的,因为我试图使用测试用例向导在Delphi中添加测试用例。如下图所示,没有任何类和方法,所以我无法创建它。

enter image description here

3 个答案:

答案 0 :(得分:8)

AFAICT,DUnit不要求测试中的代码作为类方法存在。只有测试用例本身必须是类。

编辑:向导只是一个方便。你不必使用它。

答案 1 :(得分:7)

您无法使用向导测试独立功能,但使用DUnit测试独立功能不是问题。

示例

  //***** A Standalone function te be tested in a unit far, far away
  function Add(v1, v2: Integer): Integer;
  ...

  //***** A testclass to contain the testmethods calling our 
  //      standalone function     
  TTestAdd = class(TTestcase)
  published
    procedure AddingComplement_ShouldEqualZero;
    procedure AddingNegativeNumbers_ShouldBeLessThanZero
    ...
  end;

  implementation

  procedure TTestAdd.AddingComplement_ShouldEqualZero;
  begin
    // Setup, Execute & Verify
    CheckEquals(0, Utils.Add(-1, 1), 'Complement doesn''t add to zero');
  end;

  procedure TTestAdd.AddingNegativeNumbers_ShouldBeLessThanZero
  begin
    // Setup, Execute & Verify
    CheckEquals(-3, Utils.Add(-1, -2), 'Add doesn''t add');
  end;

答案 2 :(得分:1)

需要维护真实代码。真实代码的假设没有很好的记录。忘记或从不知道这些假设的人改变了真实的代码。相信测试,不要相信代码。

Real TDD允许您在实现之前创建对象及其方法。无论如何,在编写测试用例之前,您需要一个清晰的模型。

因此生成对象,添加方法,参数等。可能使用UML2最好,然后为这些编写测试用例,然后实现对象。之后运行探查器,找出你的代码到底有多可怕,并重构。

作为一般解决方案,最好编写一个工厂对象来实例化和初始化对象。越接近核心功能,这就越重要。

为您预期的失败和异常编写测试。使用支票确保。

最后编写每个测试并在编写代码之前观察它失败,以使其成功。