Как запустить однопоточный процесс Python для тестирования? - PullRequest
1 голос
/ 24 июня 2019

Я хочу иметь возможность вставлять точки останова и т. Д. В мой код multiprocessing, поэтому в своем тесте я хочу иметь возможность исправлять Process, чтобы просто вызвать run, когда тестовый код вызывает p.start(). * 1005.*

Идея состоит в том, что тестируемая система может иметь некоторую сложную подготовку аргументов, которая передается работнику, которую я не хочу дублировать в тесте.

Вот что у меня так далеко:

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.

...