多进程中的Python unittest补丁/模拟

时间:2020-04-06 11:07:14

标签: python python-multiprocessing python-unittest

我在创建对象的单元测试时遇到问题,该测试用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:欢迎使用补丁/模拟的任何建议/改进。

0 个答案:

没有答案