Вызовы потоков выполняются только после завершения выполнения теста в Qtest. ⇐ C++
-
Anonymous
Вызовы потоков выполняются только после завершения выполнения теста в Qtest.
В настоящее время я разрабатываю модульные тесты для приложения QT. Это приложение использует один рабочий поток, который обрабатывает все вызовы базы данных, поэтому все методы базы данных выполняют одновременный вызов и возвращают QFuture. Класс обслуживания получает Qfuture и обычно выдает сигнал после его завершения (но я не уверен, что это всегда так). Но по какой-то причине кажется, что поток выполняется только после завершения тестов.
Я решил эту проблему для случаев, когда методы возвращают QFuture, и я могу вызвать для него .waitforfinished(), чтобы он ждал завершения (ВАУ). Но есть методы, которые обрабатывают QFutures внутри, и они выполняются только после завершения всех тестов.
Мой вопрос: как я могу заставить или подождать, пока все будет выполнено? (Я узнал, что могу использовать spy.wait() для этого конкретного случая, но я не уверен, что все методы действительно излучают сигнал, поэтому есть ли другие способы дождаться завершения выполнения потока внутри метода?)
Вот пример: сначала журнал, а затем код:
журнал
********* Начать тестирование Test ********* Конфигурация: использование библиотеки QtTest 6.5.3, Qt 6.5.3. QINFO: База данных Test::initTestCase() подключена! ПРОЙДЕН: Тест::initTestCase() НЕУДАЧА! : Test::isDataInserted() Сравниваемые значения не совпадают Фактический (spy.count()): 0 Ожидается (1) : 1 /test/tests.cpp(36) : место сбоя. ПРОЙДЕН: Тест::cleanupTestCase() QDEBUG: Test::isDataInserted() Выполнение запроса к QThreadPoolThread(0x168, name = "Database ThreadPool") Итого: 2 пройдено, 1 не выполнено, 0 пропущено, 0 в черном списке, 10 мс. ********* Завершено тестирование Теста ********* Запрос выполнен в QThreadPoolThread(0x16828586790, name = "Database ThreadPool") Результат запроса: QVariant(qlonglong, 4) Произошел сбой \tests.exe. Время функции: 133 мс Общее время: 142 мс Адрес исключения: 0x00007ff8fa1612e7. Код исключения: 0xc0000005. tests.cpp
#include #include #include #include "исключение.h" #include "service.h" Тест класса: public QObject { Q_OBJECT const QString dbPath = "test_DB.db"; частные слоты: недействительный initTestCase() { DbManager* db = новый DbManager(); QFuture Connection = db->connect(dbPath); QFuture test = Connection.then([]() { qInfo()
В настоящее время я разрабатываю модульные тесты для приложения QT. Это приложение использует один рабочий поток, который обрабатывает все вызовы базы данных, поэтому все методы базы данных выполняют одновременный вызов и возвращают QFuture. Класс обслуживания получает Qfuture и обычно выдает сигнал после его завершения (но я не уверен, что это всегда так). Но по какой-то причине кажется, что поток выполняется только после завершения тестов.
Я решил эту проблему для случаев, когда методы возвращают QFuture, и я могу вызвать для него .waitforfinished(), чтобы он ждал завершения (ВАУ). Но есть методы, которые обрабатывают QFutures внутри, и они выполняются только после завершения всех тестов.
Мой вопрос: как я могу заставить или подождать, пока все будет выполнено? (Я узнал, что могу использовать spy.wait() для этого конкретного случая, но я не уверен, что все методы действительно излучают сигнал, поэтому есть ли другие способы дождаться завершения выполнения потока внутри метода?)
Вот пример: сначала журнал, а затем код:
журнал
********* Начать тестирование Test ********* Конфигурация: использование библиотеки QtTest 6.5.3, Qt 6.5.3. QINFO: База данных Test::initTestCase() подключена! ПРОЙДЕН: Тест::initTestCase() НЕУДАЧА! : Test::isDataInserted() Сравниваемые значения не совпадают Фактический (spy.count()): 0 Ожидается (1) : 1 /test/tests.cpp(36) : место сбоя. ПРОЙДЕН: Тест::cleanupTestCase() QDEBUG: Test::isDataInserted() Выполнение запроса к QThreadPoolThread(0x168, name = "Database ThreadPool") Итого: 2 пройдено, 1 не выполнено, 0 пропущено, 0 в черном списке, 10 мс. ********* Завершено тестирование Теста ********* Запрос выполнен в QThreadPoolThread(0x16828586790, name = "Database ThreadPool") Результат запроса: QVariant(qlonglong, 4) Произошел сбой \tests.exe. Время функции: 133 мс Общее время: 142 мс Адрес исключения: 0x00007ff8fa1612e7. Код исключения: 0xc0000005. tests.cpp
#include #include #include #include "исключение.h" #include "service.h" Тест класса: public QObject { Q_OBJECT const QString dbPath = "test_DB.db"; частные слоты: недействительный initTestCase() { DbManager* db = новый DbManager(); QFuture Connection = db->connect(dbPath); QFuture test = Connection.then([]() { qInfo()
Мобильная версия