Вызовы потоков выполняются только после завершения выполнения теста в Qtest.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вызовы потоков выполняются только после завершения выполнения теста в Qtest.

Сообщение Anonymous »


В настоящее время я разрабатываю модульные тесты для приложения 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()
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»