我在创建对象的单元测试时遇到问题,该测试用multiprocessing
开始新的过程。
我有一个(Sandbox
)类,该类继承自BaseClass
。
沙盒类应调用一个新进程,在此再次使用BaseClass
。
在单元测试中,应模拟BaseClass。
借助@mock.patch('my_package.sandbox.BaseClass.__init__')
,我可以在Sandbox
的初始化中模拟BaseClass的初始化。
但是当进程开始时,不再对BaseClass进行修补。
我试图将其分解为这个示例
# sandbox.py
import multiprocessing
from my_package.baseclass import BaseClass
class Sandbox(BaseClass):
def __init__(self):
self._example_process = multiprocessing.Process(target=self._func)
self._example_process.start()
super(Sandbox, self).__init__()
@staticmethod
def _func():
b = BaseClass()
# base_class.py
class BaseClass():
def __init__(self):
raise Exception()
# test_sandbox.py
import unittest
import unittest.mock as mock
from my_package.sandbox import Sandbox
class SandboxTests(unittest.TestCase):
@classmethod
@mock.patch('my_package.sandbox.BaseClass')
@mock.patch('my_package.sandbox.BaseClass.__init__')
def setUp(cls, patched_base_class_init, patched_base_class) -> None:
cls.my_sandbox = Sandbox()
def test_init(self):
pass
有人知道如何解决吗?
最好的问候, 马丁
PS:欢迎使用补丁/模拟的任何建议/改进。