gpt4 book ai didi

delphi - 为 Mock 提供数据以进行单元测试

转载 作者:行者123 更新时间:2023-12-03 18:18:45 27 4
gpt4 key购买 nike

我正在做单元测试的类滚动数据库表的每条记录,并将字段中的值与前一个值相加。以下是精简的类:

procedure TSumList.Sum;
var
FSum:integer;
begin
FSum:=0;
FDB.First;
while not FDB.EOF do
begin
FSum:=FSum+FDB.GetAmount;
FDB.Next;
end;
end;

FDB 指的是名为 IIDBTable 的 DB mock 接口(interface)。

以下是依赖注入(inject)的 DB mock:

  IIDBTable = interface
['{A299D1D6-93AF-45CC-8DE2-9A4EE188C352}']
procedure First;
procedure Next;
function EOF : boolean;
function GetAmount:integer;
end;

TMockDBTable = class (TInterfacedObject,IDBTable)
procedure First;
procedure Next;
function EOF : boolean;
function GetAmount:integer;
end;

问题是我不知道如何为测试的模拟提供数据。当然,我可以添加一个额外的过程,比如 AddValues(aAmount:integer),它可以完成这项工作,但在那种情况下,我最终也会在生产中使用这个额外的过程,我不需要它。

这方面的最佳做法是什么?

我使用 Spring 作为 Delphi 框架

最佳答案

您还可以使用 DSharp 模拟(或 Delphi 模拟)。

这将是 DSharp 的设置代码(Delphi Mocks 应该类似)

var
mockDBTable: Mock<IIDBTable>;
begin
mockDBTable.Setup.WillExecute.Once.WhenCalling.First;
mockDBTable.Setup.WillReturn(False).Exactly(5).WhenCalling.EOF;
mockDBTable.Setup.WillReturn(True).Once.WhenCalling.EOF;
mockDBTable.Setup.WillReturn(5).Once.WhenCalling.GetAmount;
mockDBTable.Setup.WillReturn(4).Once.WhenCalling.GetAmount;
mockDBTable.Setup.WillReturn(3).Once.WhenCalling.GetAmount;
mockDBTable.Setup.WillReturn(2).Once.WhenCalling.GetAmount;
mockDBTable.Setup.WillReturn(1).Once.WhenCalling.GetAmount;
mockDBTable.Setup.WillExecute.Exactly(5).WhenCalling.Next;

您在这里所做的是指定您希望调用什么以及返回什么。这使您无需手动编写模拟类并为其提供数据。

关于delphi - 为 Mock 提供数据以进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21531306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com