我正在阅读 Nick Hodges 的博客http://nickhodges.com/post/Delphi-Mocks-The-Basics.aspx,这非常有趣。
但是它并没有说明我如何使用引用数据库的语句来测试类,例如TQuery.Next or TQuery.ExecSQL or TQuery.FieldByName...
等
有人遇到同样的问题吗?如果是这样,您是如何解决的?
我正在阅读 Nick Hodges 的博客http://nickhodges.com/post/Delphi-Mocks-The-Basics.aspx,这非常有趣。
但是它并没有说明我如何使用引用数据库的语句来测试类,例如TQuery.Next or TQuery.ExecSQL or TQuery.FieldByName...
等
有人遇到同样的问题吗?如果是这样,您是如何解决的?
我们在工作中所做的是拥有返回 TDataSet 的存储库。这样,您可以创建存储库的模拟/伪造(取决于您是否要测试调用了多少测试方法等)。例子:
TMyDatabaseRepository = class(TInterfacedObject, IMyDatabaseRepository)
// .. blah ..
function GetAllTheFun : TDataSet;
// .. blah ..
end;
TMyProcessThatAccessesTheDatabase = class
// .. blah ..
public
constructor Create(const AMyDatabaseRepository : IMyDatabaseRepository);
// .. blah ..
end;
所以当涉及到测试时,我们传入一个 mock IMyDatabaseRepository
。GetAllTheFun
实际上返回一个带有数据样本数据设置的TKbmMemTable 。
虽然我没有使用过Delphi Mocks,但我确实记得您可以在“飞行”(或类似的东西)上覆盖方法,因此您可能不需要费心创建一个单独的类来实现IMyDatabaseRepository
编辑:这是一个相当大的主题,可以在这里尝试和涵盖,但是有一些网站(博客)涵盖了这种类型的东西: