加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用Delphi-Mocks框架在Delphi中使用子类中的模拟

发布时间:2020-12-15 09:14:36 所属栏目:大数据 来源:网络整理
导读:好的,我一直在使用优秀的 Delphi-Mocks Framework,我刚遇到一个问题.假设我有以下接口: IDepartment = Interface ['{F4915950-8F32-4944-A3B6-8E08F6C38ECC}'] function getID() : Integer; function getName() : String; property ID: Integer read getID;
好的,我一直在使用优秀的 Delphi-Mocks Framework,我刚遇到一个问题.假设我有以下接口:

IDepartment = Interface
   ['{F4915950-8F32-4944-A3B6-8E08F6C38ECC}']
   function getID() : Integer;
   function getName() : String;
   property ID: Integer read getID;
   property Name: String read getName; 
end;

ISale = Interface
   ['{F4915950-8F32-4944-A3B6-8E08F6C38E77}']
   function getAmmount() : Currency;
   function getDepartment() : IDepartment;
   property Ammount: Currency read getAmmount;
   property Department : IDepartment getDepartment;
end;

现在,我尝试使用DUnit和Delphi-Mocks测试Sale接口,并按如下方式使用它:

procedure TMyTest.Test_Sale_HasDepartment;
var
   mckDepartment : TMock<IDeparment>;
   mckSale : TMock<ISale>;
begin
   mckDepartment := TMock<IDepartment>.Create;
   mckDepartment.Setup.WillReturn('My Department').When.Name;
   mckDepartment.Setup.WillReturn(1).When.ID;

   // Create a sale Mock
   mckSale := TMock<ISale>.Create;
   mckSale.Setup.WillReturn(100).When.Ammount;
   //** Here′s there is where I don′t know how to add a "child mock"** 
   mckSale.Setup.WillReturn(TValue.From<IDepartment>(mckDepartment)).When.Department;

  // What I am trying to get is the following:
  WriteLn(mckSale.Instance.Department.Name); // Should return "My Department" but fails with an AV. 
end;

所以我的问题是:如何将一个子模拟添加到现有的模拟接口并调用其方法和属性?

谢谢!
附:我正在使用Delphi XE2.

解决方法

mckSale.Setup.WillReturnDefault(‘getDepartment’,TValue.From(mckDepartment));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读