2017-06-13 50 views
0

我遇到的問題與建立嘲諷一些Django的看法。懲戒在Django進口類單元測試

backend.py

class Connector(object): 
    def get_this(): 
     ... 

    def get_that(): 
     ... 

view_a.py

from backend import Connector 

class AView(View): 

    def get_context_data(self, **kwargs): 
     connector = Connector() 
     things = connector.get_this(...) 

view_b.py

class BView(View): 

    def get_context_data(self, **kwargs): 
     connector = Connector() 
     things = connector.get_that(...) 

text_view_a.py

class ATest(TestCase): 
    @mock.patch('backend.Connector') 
    def test_simple(self, connector_mock): 
     mi = mock.return_value # The constructor 
     mi.get_this.return_value = ... 
     mi.get_that.return_value = ... 
     response = self.client.get(
      reverse('...view_a'), 
     ) 
     self.assertTrue(mi.get_this.called) 

text_view_b.py

class BTest(TestCase): 
    @mock.patch('backend.Connector') 
    def test_simple(self, connector_mock): 
     mi = mock.return_value # The constructor 
     mi.get_this.return_value = ... 
     mi.get_that.return_value = ... 
     response = self.client.get(
      reverse('...view_b'), 
     ) 
     self.assertTrue(mi.get_that.called) 

我所看到的行爲,他們都精細單獨工作,但只在運行時結合第一成功,其餘的失敗。基本上看起來只有第一個模擬器被設置/使用。我想這與視圖採取他們自己的導入類的副本有關?

如果是這樣嘲諷後端類的最佳做法?

保羅

+0

我要帶刺,說你的測試行爲不idempotently。你應該確保你正確地處理基於你如何測試你的安裝和拆卸的東西。也許你有一些被保持在所影響,你是不是每次重新設定類的實例類級? – idjaw

回答

2

只是自己修復它;我不得不嘲笑它是用來代替它是從哪裏來的類....

class BTest(TestCase): 
    @mock.patch('view_a.Connector') 
    def test_simple(self, connector_mock): 
     mi = mock.return_value # The constructor 
     mi.get_this.return_value = ... 
     mi.get_that.return_value = ... 
     response = self.client.get(
      reverse('...view_b'), 
     ) 
     self.assertTrue(mi.get_that.called) 
+2

也許周圍添加的解決方案應該是什麼樣子像參照你的代碼一些更多的代碼。通過查看更實際的解決方案示例,它可以幫助其他人查找此問題,從而獲得更快的解決方案 – idjaw

+0

將改變答案... –