我的单元测试需要一个本地HTTP服务器。

当我尝试在SetUp上激活TIdHTTPServer时,它失败并显示EThread消息:


“线程错误:描述符无效(6)”


这是我如何初始化它:

type
  TestMyUnit = class(TTestCase)
...
procedure TestMyUnit.SetUp;
begin
  FServer := TIdHTTPServer.Create(nil);
  FServer.OnCommandGet := HTTPServerCommandGet;
  FServer.Active := True;   // <---- This will cause error
end;


也许将Indy的TIdHTTPServer与DUnit框架一起使用会受到一些限制?


德尔福2010
印第10


TIdListenerThread.Run proc(IdCustomTCPServer单元)中此行之后的某处引发了异常

LIOHandler := Server.IOHandler.Accept(Binding, Self, LYarn);


但是,我无法更深入地了解它,我也不知道为什么。

最佳答案

您可能必须允许DUnit可执行文件在防火墙设置中打开端口...控制面板> Windows防火墙>高级设置>入站规则。

通常,Windows会在可执行文件首次尝试打开端口时询问您,但是无论如何,我都会检查其中是否有规则。

编辑:

只需添加更多信息,错误“描述符无效”看起来就像一个winsock错误,可能是因为您的代码无法打开端口。可能是因为它在防火墙处被阻止(如上所述),或者可能是您有另一个打开了该端口的程序……也许是IIS?我会在某处选择1024以上的端口,并将您的Web服务器设置为使用该端口(显然是您的客户端)。

编辑2:

我设置TIdHttpServer的代码是:

FServer := TIdHttpServer.Create(nil);
FServer.DefaultPort := 7777;
FServer.AutoStartSession := True;
FServer.OnCommandGet := ServerCommandGet;
FServer.OnCreatePostStream := ServerCreatePostStream;

FServer.Active := True;

关于delphi - TIdHTTPServer在我的DUnit测试中将其激活时引发EThread错误6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9477561/

10-09 15:45