Я хочу иметь возможность вставлять точки останова и т. Д. В мой код 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
.