使用Delphi Mocks进行TList <t> .count返回值模拟

时间:2017-03-17 20:29:06

标签: delphi delphi-mocks

在我的单元测试中,需要设置一个模拟的TList<T>。如何为已模拟的TList<T>.count属性读取设置返回值?

当我在count之后使用When时,编译器错误消息是:

[dcc32 Error] Unit1.pas(40): E2014 Statement expected, but expression of type 'Integer' found

当我在getCount之后使用When时,编译器错误消息是:

[dcc32 Error] Unit1.pas(40): E2003 Undeclared identifier: 'getCount'

count属性直接读取fCount属性。有没有解决方案?

type
  TMyClass = class
  end;

procedure TXXXTestCase.testYYY;
var
  mL : TMock<TList<TMyClass>>;
begin
  mL := TMock<TList<TMyClass>>.create;
  try
    // ...
    mL.Setup.WillReturn( 1 ).When.Count;
    // ...
  finally
    mL.Free;
  end;
end;

1 个答案:

答案 0 :(得分:0)

行。受Stefan Glinke评论的启发,我创建了一个实用程序calss,以避免访问被模拟对象的属性的属性。我只是将模拟传递给实用程序类的模拟器来获取(伪)值。

代码snipet看起来像我的原始代码:

value = object1.property.list.count;

这种内心深处的解决方案:

value = object1Utility.getListCount( object );

TObjec1tUtility将Object2Utility调用到它的响应,但在这种情况下我可以模拟Object1Utility,不需要在模拟中添加模拟。