Тестирование нескольких моделей в PyQt одновременно;какой из них потерпел неудачу? - PullRequest
0 голосов
/ 15 октября 2019

Я случайно наткнулся на Qt Model Testing ранее сегодня и понял, что это именно то, что нужно для проекта, который был выращен очень органично.

Идея проста: внедрить флаг командной строки, который может быть включен в будущем для запуска программы с безобидными проверками согласованности, работающими в фоновом режиме. После этого начинайте выслеживать проблемы одну за другой, пока проблемы не исчезнут буквально.

По сути, основы первого шага кажутся достаточно простыми:

self.mdlAlpha = alphaModel(self)
self.mdlBeta = betaModel(self)
# ...

# TODO: implement argument-switch toggle
from PyQt5.QtTest import QAbstractItemModelTester
QAbstractItemModelTester(self.mdlAlpha, QAbstractItemModelTester.FailureReportingMode.Warning, self)
QAbstractItemModelTester(self.mdlBeta, QAbstractItemModelTester.FailureReportingMode.Warning, self)
# ...

Через несколько секундбыли сотни (повторяющихся) ошибок, которые появились задолго до того, как программа была в работоспособном состоянии. Отлично! .... или это?

Оказывается, что сообщенные ошибки не достаточно ясны:

qt.modeltest: FAIL! flags == Qt::ItemIsDropEnabled || flags == 0 () returned FALSE (qabstractitemmodeltester.cpp:323)
qt.modeltest: FAIL! topLeft.isValid() () returned FALSE (qabstractitemmodeltester.cpp:753)

Конечно, неудачные тесты задокументированы, но я понятия не имею какая модель является глючной из-за количества тестируемых моделей. (Комментирование всех, кроме одного класса за раз, лишает смысла наличие флага командной строки для проверки всего ...) Я действительно хотел бы знать, какой объект / класс виноват, и регистрировать это тоже, но у меня нетУкажите, как этого добиться.

Обратите внимание, что я реализовал QtMessageHandler для преобразования сообщений журнала Qt в сообщения регистрации программ, и я все еще хочу, чтобы неудачные тесты заканчивались этим файлом журнала.

...