Как я могу написать модульные тесты для кода, который использует QDesktopServices openUrl?

Я работаю над программой на python (3.5), которая использует PyQt5 GUI. В GUI мне нужно добавить некоторые справочные ссылки на документацию на веб-сайте. Мне удается заставить его работать с:

QDesktopServices.openUrl(QUrl("my_url"))

Это работает нормально, но я хочу быть уверен, что так будет всегда.

Быстрый и грязный юнит-тест - вызвать функцию и просто заметить, что ошибки нет. Я хотел бы сделать тест, который проверит, что правильная страница сайта действительно появилась. Что я должен использовать?

1 ответ

Решение

Проверка на ошибку не будет работать вообще, потому что сам Qt никогда не вызывает ошибок (конечно, Python или PyQt могут это делать, но по совершенно не связанным причинам). Лучшее, что вы можете сделать, это проверить возвращаемое значение openUrl, который просто вернется True или же False в зависимости от того, был ли он "успешным". Но обратите внимание на следующее из документации Qt для openUrl:

Предупреждение. Возвращаемое значение true указывает, что приложение успешно запросило операционную систему открыть URL-адрес во внешнем приложении. Внешнее приложение все равно может не запуститься или не открыть запрошенный URL. Этот результат не будет возвращен в приложение.

Если вы хотите больше контроля, я предлагаю вам вместо этого использовать модуль веб-браузера Python. Это, например, позволит вам зарегистрировать свой собственный класс mock-browser для целей тестирования. webbrowser Модуль написан на чистом Python, и код довольно прост.

Другие вопросы по тегам