Python中文
首页
教程
问答
标签
搜索
登录
注册
Python多线程单元测试
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我使用多线程设计(别无选择),但我的大多数代码都位于一个线程中,其中的所有事件都通过<a href="http://docs.python.org/library/queue.html" rel="noreferrer">queue</a>进行管理。以这种方式,我的大多数代码表现得好像是单线程的,我不必担心锁、信号量和其他问题。</p> <p>唉,我已经到了需要联合测试我的代码的地步(请不要因为一开始没有TDDing而大发雷霆),我不知所措——你如何在另一个线程中测试某些东西?</p> <p>例如,假设我有以下课程:</p> <pre><code>class MyClass(): def __init__(self): self.a=0 # register event to self.on_event def on_some_event(self, b): self.a += b def get(self): return self.a </code></pre> <p>我想测试一下:</p> <pre><code>import unittest from queued_thread import ThreadedQueueHandler class TestMyClass(unittest.TestCase): def setUp(self): # create the queued thread and assign the queue to self.queue def test_MyClass(self): mc = MyClass() self.queue.put({'event_name':'some_event', 'val':1}) self.queue.put({'event_name':'some_event', 'val':2}) self.queue.put({'event_name':'some_event', 'val':3}) self.assertEqual(mc.get(),6) if __name__ == '__main__': unittest.main() </code></pre> <p><code>MyClass.get()</code>对于队列线程中的任何内容都可以正常工作,但是测试将在主线程中异步调用它,因此结果可能不正确!</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您可以查看stdlib测试中的<a href="http://hg.python.org/cpython/file/3dc602b1f4a2/Lib/test/test_threading.py" rel="nofollow">test_threading.py</a>,该测试执行的操作与您尝试执行的操作类似。基本思想是使用互斥和信号量保护线程执行,以便在断言测试条件之前完成执行。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
plt.savefig不会覆盖现有文件
1 回答
plt.savefig不保存图像
4 回答
plt.savefig在jupyter笔记本中不起作用
2 回答
plt.savefig在从另一个fi调用时停止工作
2 回答
plt.savefig在调用plt.show之前保存空数字
1 回答
plt.save不创建png文件
7 回答
plt.scatter overlay分类数据帧列
5 回答
Plt.Scatter:如何添加title、xlabel和ylab
6 回答
plt.scatter()绘图与Matplotlib中的plt.plot()绘图类似
7 回答
plt.scatter错误'NoneType'对象在成功运行后没有属性'sqrt'
6 回答
plt.set_title()中的标题字符串有误
4 回答
plt.show()
1 回答
plt.show()不在Jupyter笔记本上渲染任何内容
8 回答
plt.show()不打印plt.plot only plt.scatter
10 回答
plt.show()不显示三维散射图像
10 回答
plt.show()不显示任何内容
7 回答
plt.show()不显示数据,而是保留它供下一个图表使用(spyder)
8 回答
plt.show()使终端挂起
1 回答
plt.show()无法使用此代码
3 回答
plt.show()没有打开新的图形风
7 回答