передать argc и argv в QApplication в метод модульного теста - PullRequest
0 голосов
/ 06 апреля 2019

Я использую инфраструктуру QtTest для тестирования некоторых функций, которым требуется QApplication.Поэтому я хочу написать метод моего объекта тестового примера, например:

void MyTestCase::testSomething()
{
    QApplication app(argc, &argv); // problem here - how to pass arc and argv
    callSomethingThatNeedsQApp();
    // app destroyed at the end of scope
}

. Проблема в том, что я не знаю, как создать экземпляр QApplication без argc и argv.В моем main.cpp у меня есть:

{
    MyTestCase tc;
    status |= QTest::qExec(&tc, argc, argv);
}

Так есть ли способ, которым я могу достичь argc и argv из тела метода тестового примера void MyTestCase::testSomething() и использовать его для создания экземпляра QApplication * * 1016

1 Ответ

1 голос
/ 06 апреля 2019

Вы не можете создать несколько приложений во время выполнения теста.Это упомянуто в официальном документе:

Должен быть создан только один объект приложения.

Также указано:

Предупреждение: данныеупоминаемые argc и argv должны оставаться действительными в течение всего времени жизни объекта QApplication.Кроме того, argc должен быть больше нуля, а argv должен содержать хотя бы одну допустимую символьную строку.

Если вы планируете использовать приложение в нескольких тестах, возможно, вы сможете создать одноэлементный экземпляр, содержащийСрок службы приложения:

struct QtApp {
    auto& instance() {
         static auto argc = 1;
         static std::array<char*, 1> argv = {{ "my-app-name" }};
         static const QApplication app = QApplication(argc, argv.data());
         return app;
    }
}

Теперь вам просто нужно вызвать его перед использованием ваших тестов или в основном приложении:

void MyTestCase::testSomething() {
    QtApp::instance();
    callSomethingThatNeedsQApp();
} 

В ваших тестовых функциях, если вам нужноДоступ к экземпляру приложения, официальные документы упоминают:

Глобальный указатель qApp ссылается на этот объект приложения.Должен быть создан только один объект приложения.

Таким образом, вы можете использовать qApp для доступа к нему или только что созданному вами синглтону.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...