0

我正在阅读 Nick Hodges 的博客http://nickhodges.com/post/Delphi-Mocks-The-Basics.aspx,这非常有趣。

但是它并没有说明我如何使用引用数据库的语句来测试类,例如TQuery.Next or TQuery.ExecSQL or TQuery.FieldByName...

有人遇到同样的问题吗?如果是这样,您是如何解决的?

4

1 回答 1

2

我们在工作中所做的是拥有返回 TDataSet 的存储库。这样,您可以创建存储库的模拟/伪造(取决于您是否要测试调用了多少测试方法等)。例子:

TMyDatabaseRepository =  class(TInterfacedObject, IMyDatabaseRepository)
  // .. blah ..
  function GetAllTheFun : TDataSet;
  // .. blah ..
end;

TMyProcessThatAccessesTheDatabase = class
  // .. blah ..
public
  constructor Create(const AMyDatabaseRepository : IMyDatabaseRepository);    
  // .. blah ..
end;

所以当涉及到测试时,我们传入一个 mock IMyDatabaseRepositoryGetAllTheFun实际上返回一个带有数据样本数据设置的TKbmMemTable 。

虽然我没有使用过Delphi Mocks,但我确实记得您可以在“飞行”(或类似的东西)上覆盖方法,因此您可能不需要费心创建一个单独的类来实现IMyDatabaseRepository

编辑:这是一个相当大的主题,可以在这里尝试和涵盖,但是有一些网站(博客)涵盖了这种类型的东西:

于 2013-07-13T21:49:53.387 回答