2017-06-13 12 views
0

私はいくつかのdjangoビューのための設定をしている問題を抱えています。django unittestでインポートされたクラスを模擬しました

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

私が刺しを取り、あなたのテストが等冪な振る舞いされていないことを言うつもりです。どのようにテストしているかに基づいて、setUpとtearDownの中のものを適切に処理していることを確認する必要があります。たぶん、あなたは毎回リセットされていないクラスのインスタンスに影響を与えているクラスレベルで保持されている何かを持っているでしょうか? – 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

答えを変えるでしょう... –

関連する問題