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