gpt4 book ai didi

Python单元测试多线程

转载 作者:行者123 更新时间:2023-12-04 12:04:08 27 4
gpt4 key购买 nike

我是使用单元测试模块进行单元测试的新手,我需要测试一个使用线程模块的类。
我并没有真正找到关于使用线程组合类的最佳方法的任何解决方案。
我开始测试线程是否被调用(即活着),但后来我看到没有方法可以杀死线程。
我需要一周的时间来确保线程中的代码在做它应该做的事情。
我需要为此使用线程还是应该只测试函数本身?

谢谢你的帮助!

这是我的代码(有趣的部分):

class VideoLoader(Node):
# some code

def execute(self):
self.thread1 = Thread(target = run_resizer, args = (self,))

def run_resizer(node):
while True:
while not len(node.frames_to_resize):
time.sleep(0.001)
node.frames.append(resize({'height': 400, 'width': 500))

最佳答案

我遇到了同样的问题,但我找不到好的解决方案,所以我做了一个解决方法。
我完成了您的代码,使其可独立执行。我确实做了一个改变:我使用组合而不是继承(正如设计模式书中的四人组所推荐的那样)。

# loader.py
from threading import Thread
import time

class VideoLoader:
def __init__(self, node):
self.thread1 = None
self.node = node
self.is_resizer_active = False

def execute(self):
self.thread1 = Thread(target=self.run_resizer)
self.thread1.start()

def run_resizer(self):
node = self.node
self.is_resizer_active = True
while self.is_resizer_active: # need some way of stopping it eventually
while not len(node.frames_to_resize):
time.sleep(0.001)
node.frames.append(resize({'height': 400, 'width': 500}))

def resize(*a, **kw):pass # just to have an executable test

import unittest
from unittest.mock import MagicMock
from loader import VideoLoader

class TestVideoLoader(unittest.TestCase):
def test_ensure_frame_resized(self):
fake_node = MagicMock()
fake_node.frames_to_resize = [1] # to make sure you fall through the 2nd while loop
loader = VideoLoader(fake_node)
loader.execute()
loader.is_resizer_active = False
loader.thread1.join()
fake_node.frames.append.assert_called()

if __name__ == '__main__':
unittest.main()

关于Python单元测试多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647612/

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