Я очень новичок в Qt, и я нахожусь в процессе проверки структуры модульного тестирования Qt Test. Я использую Qt 5.5.
Я могу создавать тестовые случаи с использованием макросов Qt и запускать их из Qt Creator, но у меня возникают проблемы при запуске из командной строки. В частности, я не могу использовать параметры ведения журнала, предоставляемые Qt Test.
Вот что я делаю:
QtTestValidation5.exe –xml
QtTestValidation5.exe -o results.txt, txt
Я хотел бы записать результаты теста в форматах xml, csv и текстовых файлов. Может ли кто-нибудь помочь, пожалуйста?
Первый вариант должен выводить результаты теста на стандартный вывод в формате XML. Я только что проверил это с моей собственной библиотекой, и это работает. Хотя он выводит несколько связанных XML-документов, но это, вероятно, потому, что я использую нестандартные main()
который выполняет несколько тестов вручную, поэтому, очевидно, для каждого из них создается один XML-документ.
Второй, вероятно, ошибочный: он должен быть -o results.txt,txt
(нет места). Работает как я так же хорошо, но только пишет последний тест. Опять же, это, вероятно, потому что я выполняю несколько тестов вручную, поэтому каждый из них перезаписывает предыдущий, и я вижу только последний. Если я хочу сохранить все тесты, мне нужно указать формат с помощью -xml
или же -txt
и затем перенаправить его на стандартный вывод:
qztest.exe -xml > results.xml
Это работает, но я все еще получаю несколько связанных документов в одном файле.
-csv
опция не работает, но опять же Qt docs сказать
Этот режим подходит только для тестов, так как он подавляет нормальный
пропустить / пропустить сообщения.
И у меня нет ориентиров.
Что касается того, почему аргументы работают на меня, вот мой main()
:
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
int err = 0;
{
TestQuaZip testQuaZip;
err = qMax(err, QTest::qExec(&testQuaZip, app.arguments()));
}
{
TestQuaZipFile testQuaZipFile;
err = qMax(err, QTest::qExec(&testQuaZipFile, app.arguments()));
}
// And so on, and so on...
if (err == 0) {
qDebug("All tests executed successfully");
} else {
qWarning("There were errors in some of the tests above.");
}
return err;
}
Смотри, я создаю QCoreApplication
— это может быть очень важно, а затем я вручную передаю аргументы QText::qExec
, Поскольку вы создали свой проект с помощью Qt Creator, вы можете посмотреть на main()
, Возможно, Qt Creator не инициализировал что-то правильно. Помните, чтобы аргументы работали, код тестирования должен каким-то образом иметь доступ к этим аргументам! Таким образом, вы должны либо передать их явно, либо, по крайней мере, инициализировать приложение, чтобы код мог сделать что-то вроде QCoreApplication::instance()->arguments()
внутренне.
Других решений пока нет …