如何针对使用 QDesktopServices openUrl 的代码编写单元测试?
How can I write unit tests against code that uses QDesktopServices openUrl?
我正在开发一个使用 PyQt5 GUI 的 python (3.5) 程序。在 GUI 中,我需要添加一些指向网站文档的帮助链接。我设法让它与以下产品一起使用:
QDesktopServices.openUrl(QUrl("my_url"))
它运行良好,但我想确保它始终如此。
一个快速而肮脏的单元测试是调用函数并简单地注意到没有错误。我想做一个测试来检查是否显示了正确的网站页面。我应该使用什么?
检查错误根本不起作用,因为 Qt 本身从不引发错误(当然,Python 或 PyQt 可能会引发错误,但出于完全不相关的原因)。您可以做的最好的事情是检查 openUrl
的 return 值,这将简单地 return True
或 False
取决于它是否是 "successful" .但请注意 openUrl 的 Qt 文档中的以下内容:
Warning: A return value of true indicates that the application has
successfully requested the operating system to open the URL in an
external application. The external application may still fail to
launch or fail to open the requested URL. This result will not be
reported back to the application.
如果你想要更多的控制,我建议你使用 Python 的 webbrowser module instead. This would, for example, allow you to register your own mock-browser class for the purposes of testing. The webbrowser
module is written in pure Python and the code 非常简单。
我正在开发一个使用 PyQt5 GUI 的 python (3.5) 程序。在 GUI 中,我需要添加一些指向网站文档的帮助链接。我设法让它与以下产品一起使用:
QDesktopServices.openUrl(QUrl("my_url"))
它运行良好,但我想确保它始终如此。
一个快速而肮脏的单元测试是调用函数并简单地注意到没有错误。我想做一个测试来检查是否显示了正确的网站页面。我应该使用什么?
检查错误根本不起作用,因为 Qt 本身从不引发错误(当然,Python 或 PyQt 可能会引发错误,但出于完全不相关的原因)。您可以做的最好的事情是检查 openUrl
的 return 值,这将简单地 return True
或 False
取决于它是否是 "successful" .但请注意 openUrl 的 Qt 文档中的以下内容:
Warning: A return value of true indicates that the application has successfully requested the operating system to open the URL in an external application. The external application may still fail to launch or fail to open the requested URL. This result will not be reported back to the application.
如果你想要更多的控制,我建议你使用 Python 的 webbrowser module instead. This would, for example, allow you to register your own mock-browser class for the purposes of testing. The webbrowser
module is written in pure Python and the code 非常简单。