如何模拟TWebRequest / TIdHTTPAppRequest?

时间:2018-07-06 15:17:52

标签: unit-testing delphi indy dunit

我有一个函数可以通过参数接受TWebRequest,例如:

function foo(const request: TWebRequest ): boolean;

我如何创建TWebRequest并设置一些属性,例如:

  • 主机
  • ServerPort
  • QueryFields
  • ContentFields

我尝试过:

var
  aWebRequest: TWebRequest;
begin
  aWebRequest := TWebRequest.Create;

但是在创建Delphi时会引发异常:

  

$ XXXXXXXX美元的首次机会例外。异常类EAbstractError   并显示消息“抽象错误”。

后代是TIdHTTPAppRequest,但需要:

constructor TIdHTTPAppRequest.Create(
  AThread: TIdContext; 
  ARequestInfo: TIdHTTPRequestInfo; 
  AResponseInfo: TIdHTTPResponseInfo
);

每个参数都需要其他对象等。

是否有一种简单的方法(例如,第三方单元,未知代码段或技巧)来模拟用于单元测试目的的请求?

1 个答案:

答案 0 :(得分:1)

EAbstractError通常意味着您试图实例化通用抽象类(例如TStrings),而不是实例化包含所需实现的后代(例如TStringList)。因此,您需要找到TWebRequest后代并使用它。

出于嘲笑目的,您可以尝试编写自己的“空”后代,但是我怀疑这样做是否可以按预期进行。