gpt4 book ai didi

python - 在不修改的情况下在线程中测试 Python 代码?

转载 作者:行者123 更新时间:2023-11-28 23:06:34 25 4
gpt4 key购买 nike

假设我有这样一段代码,它是一个长期运行的执行线程,用于轮询事件和触发其他事件(在我的例子中,使用 XMLRPC 调用)。它需要重构为干净的对象,以便可以进行单元测试,但与此同时,我想在一些集成测试中捕获它的一些当前行为,将其视为黑盒。例如:

# long-lived code
import xmlrpclib
s = xmlrpclib.ServerProxy('http://XXX:yyyy')
def do_stuff():
while True:
...
if s.xyz():
s.do_thing(...)

_

# test code
import threading, time
# stub out xmlrpclib
def run_do_stuff():
other_code.do_stuff()

def setUp():
t = threading.Thread(target=run_do_stuff)
t.setDaemon(True)

def tearDown():
# somehow kill t
t.join()

def test1():
t.start()
time.sleep(5)
assert some_XMLRPC_side_effects

最后一个大问题是被测代码被设计为永远运行,直到 Ctrl-C,我没有看到任何方法强制它引发异常或以其他方式终止线程以便我可以启动它在不更改我正在测试的代码的情况下从头开始。一旦调用被测函数,我就失去了从我的线程中轮询任何标志的能力。

我知道这真的不是测试设计的工作方式,集成测试的值(value)有限等等,但我希望展示测试和良好设计的值(value) friend 慢慢努力,而不是一口气完全重新设计他的软件。

最佳答案

The last big issue is that the code under test is designed to run forever, until a Ctrl-C, and I don't see any way to force it to raise an exception or otherwise kill the thread

测试驱动开发的重点是重新思考您的设计,使其可测试。

永远循环——虽然看起来适合生产使用——但无法测试。

所以让循环终止。它不会影响生产。它将提高可测试性。

“设计为永远运行”并不是为了可测试性而设计的。因此,将设计修复为可测试的。

关于python - 在不修改的情况下在线程中测试 Python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4807624/

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