如何一次从所有测试用例中查看DUnit GUI中的状态消息?

时间:2012-03-06 11:52:52

标签: delphi delphi-2010 status dunit

您可以使用TAbstractTest.Status程序在测试期间在DUnit GUI中显示一些调试消息。

但是当我运行测试组时,我只能看到上次执行测试的状态消息。我能否以某种方式查看完整的日志,而不选择每个单独的测试运行?

3 个答案:

答案 0 :(得分:3)

我使用了Status()方法,它会在发生故障时输出值:

procedure Test.TestGetStringListQueryValuesException;
var
  ReturnValue: TList<String>;
  item: String;
begin
  ReturnValue := FTest.GetStringListQueryValues;
  try
    for item in ReturnValue do
    begin
      Status('Value Processed: ' + item);
      CheckTrue(Pos('B', item) > 0, 'Wrong Value, Expected Item containing ''B'' but found: ' + item);
    end;
  finally
    ReturnValue.Free;
  end;
end;

结果就像这样:

TestGetIntegerListQueryValuesException: ETestFailure
at  $0050B842
Wrong Value, Expected > 50 and < 60 but found: 61, expected: <True> but was: <False>

Status Messages
Value Processed: 52
Value Processed: 54
Value Processed: 55
Value Processed: 58
Value Processed: 59
Value Processed: 61

确定测试过程中出现的问题非常有用。 我没有尝试过SetStatusListener(),但我认为如果我们想在测试成功时显示日志记录,那么它应该是正确的方法。

我想模仿与Nunit相同的行为,您可以在输出部分记录自定义消息。

有更好的想法吗?

答案 1 :(得分:2)

DUnit源代码使用IStatusListener接口和公共方法

procedure TAbstractTest.SetStatusListener(Listener: IStatusListener);

可以覆盖在测试类中使用新实现。我没试过,但它可能是最干净的解决方案。

答案 2 :(得分:0)

首先编写一个新程序

   procedure Log(text: string);
   begin
      LogStringList.Add(text);
      Status(text);
   end;

将所有status()替换为Log()。并在测试结束时创建一个新测试

   procedure TestXXX.ShowLog;
   begin
      Status(LogStringList.Text);
      LogStringList.Clear;
   end;

您必须在测试单元的初始化块中创建LogStringList: TStringList