gpt4 book ai didi

python - PyQt 和单元测试——如何处理信号和槽

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:27 25 4
gpt4 key购买 nike

我正在开发的一些小应用程序使用我编写的模块通过 REST API 检查某些 Web 服务。我一直在尝试向它添加单元测试,这样我就不会破坏东西,但我偶然发现了一个问题。

我使用大量信号槽连接来异步执行操作。例如,一个典型的测试是(伪 Python),以 postDataDownloaded 作为信号:

def testConnection(self):

"Test connection and posts retrieved"

def length_test():
self.assertEqual(len(self.client.post_data), 5)

self.client.postDataReady.connect(length_test)
self.client.get_post_list(limit=5)

现在,unittest 将在运行时报告此测试“正常”,无论结果如何(因为正在调用另一个槽),即使断言失败(我将得到一个未处理的 AssertionError)。故意使测试失败的示例:

Test connection and posts retrieved ... ok
[... more tests...]

OK

Traceback (most recent call last):
[...]
AssertionError: 4 != 5

测试中的插槽只是一个实验:如果它在外部(实例方法),我会得到相同的结果。

我还必须补充一点,我调用的各种方法都会发出 HTTP 请求,这意味着它们需要一些时间(我需要模拟请求 - 同时我正在使用 SimpleHTTPServer 来伪造连接并给他们适当的数据)。

有办法解决这个问题吗?

最佳答案

您需要避免在调用回调之前退出测试方法。我相信调用将在一个单独的线程中发生,所以 threading.Event似乎合适:

import threading

...

def testConnection(self):
"Test connection and posts retrieved"

self.evt = threading.Event()

def length_test():
self.evt.set()

self.client.postDataReady.connect(length_test)
self.client.get_post_list(limit=5)
self.evt.wait()
self.assertEqual(len(self.client.post_data), 5)

关于python - PyQt 和单元测试——如何处理信号和槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2473577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com