Как просмотреть сообщения о состоянии в графическом интерфейсе 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
в блоке инициализации вашего тестового блока.