Как просмотреть сообщения о состоянии в графическом интерфейсе DUnit из всех тестовых случаев одновременно?

Ты можешь использовать TAbstractTest.Status Процедура для отображения некоторых сообщений отладки в графическом интерфейсе DUnit во время ваших тестов.

Но когда я запускаю группу тестов, я вижу только сообщения о состоянии последнего выполненного теста. Могу ли я как-то просмотреть весь журнал, не выбирая каждый отдельный тест для запуска?

3 ответа

Решение

Исходный код DUnit использует интерфейс IStatusListener и публичный метод

procedure TAbstractTest.SetStatusListener(Listener: IStatusListener);

который может быть переопределен для использования новой реализации в ваших тестовых классах. Я не пробовал, но это может быть самым чистым решением.

Я использовал метод 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, где вы можете регистрировать настраиваемые сообщения в разделе вывода.

Есть идеи получше?

Сначала напишите новую процедуру

   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 в блоке инициализации вашего тестового блока.

Другие вопросы по тегам