我希望尝试对某种设计模式进行单元测试,并且在使用工作时遇到一些麻烦。非常感谢在这个问题上的一些帮助。以下是我想测试的代码的基本概念。我在修补和create_autospec上尝试了一些不同的变体,但无法使回调正常工作。
我想模仿b.start()方法只是做回调而不是所有的逻辑。
使用最新尝试更新了代码。回调方法没有被约束。
A.py
import time
from B import B
class A(object):
def __init__(self):
self.b = None
self.flag = True
def start_b(self):
self.b = self.create_b()
self.b.callback = self.b_completed
self.b.start()
while self.flag:
print("Waiting on Job Finish")
time.sleep(1)
def create_b(self):
return B()
def b_completed(self, b):
self.flag = False
B.py
from threading import Thread
class B(Thread):
def __init__(self):
Thread.__init__(self)
self.callback = None
def run(self):
# do some logic
print("In B.run")
self.callback(self)
测试/ test_A.py
import unittest
from mock import mock
import A
import B
class ATestCase(unittest.TestCase):
@mock.patch.object(A.A, "create_b", autospec=True)
def test_simple(self, mock_create_b):
mock_create_b.side_effect = create_b_mock
a = A.A()
a.start_b()
# Assertion Logic
def create_b_mock(self):
b = mock.MagicMock(spec=B.B)
b.start.side_effect = callback_method
return b
def callback_method(self):
self.callback(self)
错误: TypeError:callback_method()缺少1个必需的位置参数:' self'
答案 0 :(得分:0)
如果你的代码是正确的,我的意思是,没有缩进错误,你在类之外调用callback_method,位置参数为self
。这是错误。
如果来自 tests / test_A.py 的callback_method
应该在课程内,您将收到unittest.TestCase
没有回调方法的错误。