如何用 Delphi 和TestInsight进行匿名测试?

gpfsuwkq  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(148)

我想用匿名方法测试一个过程。这个函数使用anonymousThread来执行一个rest请求。它通过匿名方法返回synchronized。
我该怎么做呢?
我正在使用TestInsight,并有这个。

// Calls a rest threaded request
procedure Shows.GetAgenda;
begin
  var testCompleted := false;
  DmShows.LoadShows(120,
  procedure (ServerResult : TServerResult)
  begin

    try
      Assert.IsTrue(ServerResult.StatusCode = 200, ServerResult.Message);
      Assert.IsTrue(DmShows.TableShows.RecordCount > 0, 'No shows found for testing.');
    finally
      TestCompleted := true;
    end;

  end);

  while not testCompleted do
  begin
    TThread.Sleep(10);
    Application.ProcessMessages();
  end;

end;

本例在第一次Assert时在CheckSynchronize中引发异常。匿名方法已同步。

puruo6ea

puruo6ea1#

不能从用作回调的匿名方法中运行测试框架验证方法,因为测试框架将无法正确捕获这些异常。
您需要引入额外的变量,分配您希望在回调中验证的适当值,然后在调用回调并设置testCompleted标志之后,验证结果。
我不确定您是否可以访问Application,如果您正在通过TestInsight运行的话,所以我用CheckSynchronize调用替换了Application.ProcessMessages,这是您实际处理同步代码所需要的,如果您从控制台运行DUnitX,这将支持正确的测试。
如果您可以访问TestInsight中的Application示例,则可以保留Application.ProcessMessages,但在这种情况下,您不能使用console。

procedure Shows.GetAgenda;
begin
  var testCompleted := false;
  var StatusCode := 0;
  var StatusMessage := '';
  var RecordCount := 0;

  DmShows.LoadShows(120,
  procedure (ServerResult : TServerResult)
  begin
    try
      StatusCode := ServerResult.StatusCode;
      StatusMessage := ServerResult.Message;
      RecordCount := DmShows.TableShows.RecordCount;
    finally
      TestCompleted := true;
    end;
  end);

  while not testCompleted do
  begin
    TThread.Sleep(10);
    CheckSynchronize(1000);
  end;

  Assert.IsTrue(StatusCode = 200, StatusMessage);
  Assert.IsTrue(RecordCount > 0, 'No shows found for testing.');    
end;

相关问题