Delphi XE2中的模拟方法FieldByName

Delphi XE2中的模拟方法FieldByName,delphi,mocking,Delphi,Mocking,我正在开发一个类,并试图模拟其中包含的数据集(TTable) 在为数据集创建了接口之后,我开始开发FieldByname方法的模拟: type IDataSet = interface ... function FieldByName(const Name: string): TField; ... end; TMockDataSet = class(TInterfacedObject, IDataSet) ... function FieldByN

我正在开发一个类,并试图模拟其中包含的数据集(TTable)

在为数据集创建了接口之后,我开始开发FieldByname方法的模拟:

type
  IDataSet = interface
  ...
    function FieldByName(const Name: string): TField;
  ...
  end;

  TMockDataSet = class(TInterfacedObject, IDataSet)
    ...
    function FieldByName(const Name: string): TField;
    ...
  end;
我尝试了以下实现,但它给了我一个运行时错误

 function TMockDataSet.FieldByName(const Name: string): TField;
  var
    f: TCurrencyField;
  begin
    f := TCurrencyField.Create(nil);
    f.AsCurrency := 1; // runtime error
    result := f;
  end;

有人知道如何解决这个问题吗?

在您的案例中,您遇到了模拟(数据集)返回模拟(字段)的问题。试着模拟整个操作(你正在对你要回来的场地做一些事情,对吗?)不确定你在这里想做什么?您需要一个实现的
TDataSet
来关联
t字段
,然后才能为其赋值:
f.DataSet
f.FieldName
应该有效。此外,当您遇到“运行时错误”时,请提供确切的详细信息。也就是说,应使用
TDataSet.FieldByName
方法检索给定名称的现有字段信息(而不是创建新字段)@DelphiCoder:请停止以这种琐碎的方式编辑旧答案。