我正在用Delphi 10.2(win32 target)编写的一套应用程序编写一个小型集成测试框架。
我的想法是检测一个特定的command-lien参数,如果它存在,则运行测试,将结果打印到STDOUT和控制台,然后以0(无错误)或1(错误)退出,以便构建脚本可以获取结果。
除了最后一部分之外,它运作良好:我无法正确设置进程退出代码并从调用脚本中读回。我总是得到值-1073741515。
由于该程序理论上是一个GUI应用程序,我编写了一些代码,允许它附加到调用控制台(或者如果不存在则创建一个),也许我的问题来自于它。
这是我的代码:
UIAbstraction.writeln('Integration testing of '+ModuleName, dmEmphasis);
if Errors.Count > 0 then
begin
UIAbstraction.writeln('Erros occured during integration tests:');
Errors.ForEach(procedure (const Aline: string)
begin
UIAbstraction.writeln(ALine, dmError);
end
);
UIAbstraction.Detach;
ExitProcess(cardinal(1));
end
else
begin
UIAbstraction.writeln('Integration tests sucessfull', dmSuccess);
UIAbstraction.Detach;
ExitProcess(cardinal(0));
end;
UIAbstraction是一个很小的类,它很好地抽象了UI(目标是以后能够轻松地注入不同的实现,可以与不同的集成测试系统集成)。它主要有两个有意义的方法:附加和分离:
procedure TConsoleConnector.Attach;
begin
IsAttached:=AttachConsole(-1);
if not IsAttached then
IsAttached := GetlastError = 5; // 5 = ACCESS_DENIED = already attached
if not IsAttached
then
begin
IsAttached:=AllocConsole;
if not IsAttached then
RaiseLastOSError;
end;
end;
procedure TConsoleConnector.Detach;
begin
if IsAttached then
FreeConsole;
IsAttached:=false;
end;
不幸的是,当我从命令行运行此代码并使用echo %errorlevel%
跟随它时,我总是得到-1073741515
而不是预期的0或1。