你最喜欢的Delphi嘲笑库是什么?

我想开始在我的Delphi项目上使用模拟对象。

快速谷歌后,我已经find了那些:

  • delphi模拟向导
  • PascalMock

所以我的问题是你最喜欢的是什么?为什么?

Woaw,我是PascalMock项目负责人,这是我第一次听说Delphi Mock Wizard! PascalMock非常不错。

顺便说一句,你也有一些较小的模拟框架:

  • SimpleMock
  • 超基本的MockObjects

也许还有其他一些呢?

此外,PascalMock是开源的,贡献或改进的想法是受欢迎的。

PS: CVS最新的PascalMock版本为1.1版增加了额外的function,如:

  • 使用RTTI的接口在运行时自动模拟创build
  • 允许以任何顺序期望方法调用
  • 至less需要x个方法的调用

PascalMock虽然稳定,但是多年来一直没有完成。

有一个叫做Delphi Mocks的新模拟库。 它只适用于Delphi XE2或更新版本。

试试Dsharp 。 这就像delphi嘲笑,但没有内存泄漏。

恕我直言DSHARP是更好的,虽然我很兴奋与delphiMocks起初。

我们的开放源代码mORMot框架现在可以在其不稳定的版本中对任何Delphi接口进行存根模拟

像往常一样,解释库的function的最好方法是使用它来查看代码。 下面是一个例子(类似于RhinoMocks附带的一个例子),validation当我们执行“忘记我的密码”场景时,我们记得正确地调用Save()方法:

 procedure TMyTest.ForgotMyPassword; var SmsSender: ISmsSender; UserRepository: IUserRepository; begin TInterfaceStub.Create(TypeInfo(ISmsSender),SmsSender). Returns('Send',[true]); TInterfaceMock.Create(TypeInfo(IUserRepository),UserRepository,self). ExpectsCount('Save',qoEqualTo,1); with TLoginController.Create(UserRepository,SmsSender) do try ForgotMyPassword('toto'); finally Free; end; end; 

而…就是这样,因为当IUserRepository实例将被释放时,validation将发生。

可用的function(与其他Delphi嘲笑框架相比,有些function是独一无二的):

  • 明确区分存根和嘲讽 ,并与unit testing课程整合;
  • 处理varout参数作为返回值,除了函数结果;
  • 通过stream畅的界面或代理/callback来保存定义;
  • 通过“expect-run-verify”和/或“run-verify”(又名“testing间谍”)模式进行嘲讽,根据您的testing期望进行select。
  • 综合方法调用跟踪;
  • 开源,从Delphi 6到XE3;
  • 轻量级和快速(不要依靠慢的TVirtualInterface)。

查看相关的博客文章:

  • delphi与mORMot的存根和模拟 ;
  • dependency injection,存根和嘲笑 ;
  • 先进的嘲笑和存根与mormot 。

delphi模拟向导只是为帕斯卡模拟生成向导。 他们不是竞争的实现。

看看“ Delphi Mocks ”和“ Delphi Mocks:基础