【发布时间】:2015-10-14 14:51:45
【问题描述】:
我有一些代码使用 multiprocessing.Pool 来分叉工作人员并并行执行任务。我正在尝试找到正确的方法来运行此代码的单元测试。
注意我不是试图并行测试串行代码测试用例,我知道像鼻子支持这样的包。
如果我编写一个测试所述并行代码的测试函数,并尝试通过以下方式用鼻子运行测试:nosetests tests/test_function.py 非并行测试正确执行,但是当多处理尝试分叉时并行测试失败,因为 main 不可导入:
File "C:\python-2.7.10.amd64\lib\multiprocessing\forking.py", line 488, in prepare
assert main_name not in sys.modules, main_name
AssertionError: __main__
assert main_name not in sys.modules, main_name
AssertionError: _assert main_name not in sys.modules, main_name
_main__AssertionError
: __main__
这只是重复,直到我终止任务。如果我将tests/test_function.py 修改为包含以下内容,我可以成功运行测试:
if __name__ == '__main__':
import nose
nose.main()
然后用python tests\test_function.py执行
那么,与单元测试包集成的“正确”方法是什么(不必是鼻子)?
环境:Windows 7 64 位上的 Python 2.7.10 amd64
2020 年更新:使用 python 3 和 pytest,这不是问题,建议升级!
【问题讨论】:
标签: python unit-testing nose python-multiprocessing