我在一个名为Utils.pas
的旧单元中有几个小函数。
现在我想重构一些,但我认为最好先编写测试。有了DUnit,我认为没有课程就不可能。
所以我想知道如何在重构之前测试它们?
修改
我认为这是不可能的,因为我试图使用测试用例向导在Delphi中添加测试用例。如下图所示,没有任何类和方法,所以我无法创建它。
答案 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最好,然后为这些编写测试用例,然后实现对象。之后运行探查器,找出你的代码到底有多可怕,并重构。
作为一般解决方案,最好编写一个工厂对象来实例化和初始化对象。越接近核心功能,这就越重要。
为您预期的失败和异常编写测试。使用支票确保。
最后编写每个测试并在编写代码之前观察它失败,以使其成功。