我的单元测试需要一个本地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/