如何运行Python Process单线程进行测试?

时间:2019-06-24 19:49:40

标签: python-3.x multiprocessing python-unittest.mock

我希望能够在我的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中的代码不知所措。

0 个答案:

没有答案