0
我期待嘗試和單元測試某種設計模式,並有一些麻煩讓事情工作。將不勝感激在這個問題上的一些幫助。以下是圍繞我想測試的代碼的基本思路。我在修補和create_autospec上嘗試了一些不同的變體,但無法使回調正常工作。Python嘲諷回調
我想嘲笑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)
錯誤: 類型錯誤:callback_method()缺少1個所需位置參數: 'self'
但create_b()方法正常工作,它正在做同樣的事情。 – user1020788