2016-05-13 94 views
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'

回答

0

如果你的代碼是正確的,我的意思是沒有縮進錯誤,你在類的外面調用callback_method,位置參數爲self。這是錯誤。

如果callback_method測試/ test_A.py應該是內部類,您將收到unittest.TestCase還沒有回調方法錯誤。

+0

但create_b()方法正常工作,它正在做同樣的事情。 – user1020788