我希望能够在我的multiprocessing
代码中插入断点等,因此在我的测试中,我希望能够修补Process
以在测试代码调用时仅调用run
p.start()
。
这个想法是,被测系统可能有一些复杂的参数准备传递给工作程序,我不想在测试中重复。
这是我到目前为止所拥有的:
import multiprocessing
class Worker(multiprocessing.Process):
def __init__(self, x):
super(Worker, self).__init__()
self.x = x
def run(self):
return self.x
def subclass():
"""Run a process by subclassing Process."""
p = Worker(1)
p.start()
p.join()
import pytest
from unittest import mock
@mock.patch.object(Worker, 'join'):
@mock.patch.object(Worker, 'start'):
def test_subclass(mock_start, mock_join):
subclass()
# TODO: how to get access to Worker.run?
assert patched_worker.run() == 1
assert mock_start.called
assert mock_join.called
pytest.main()
我也尝试过@mock.patch('__Worker__')
,但这会使__init__
和run
中的代码不知所措。