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

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

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

Ответы [ 3 ]

3 голосов
/ 27 мая 2012

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

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

2 голосов
/ 06 марта 2012

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

procedure TAbstractTest.SetStatusListener(Listener: IStatusListener);

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

0 голосов
/ 09 января 2013

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

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

...