Я пытаюсь смоделировать объект multiprocessing.Event
, чтобы при вызове event.is_set()
возвращалось значение False на первой итерации и значение true на второй итерации. Я потерпел неудачу при следующей попытке:
import unittest
import unittest.mock as mock
import multiprocessing
class MyClassUnderTest:
def __init__(self):
self.event = multiprocessing.Event()
# start a Process which immediately uses self.event
def my_method_under_test(self):
while not self.event.is_set():
pass # do something
return True
class TestMyClassUnderTest(unittest.TestCase):
@mock.patch.object(multiprocessing.Event, 'is_set', return_value=False)
def test_my_method(self, mock_event):
mock_event.side_effect = [False, True]
myobj = MyClassUnderTest()
self.assertTrue(myobj.my_method_under_test())
Я получаю сообщение об ошибке:
AttributeError: <bound method BaseContext.Event of <multiprocessing.context.DefaultContext object at 0x7f1068a50e48>> does not have the attribute 'is_set'
Я не могу переопределить MyClassUnderTest.event
, потому что объект события используется немедленно, поэтому я пытаюсь переопределить весь multiprocessing.Event
класс.