私はいくつかの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)
は私が見ている行動は、彼らのすべてが個別に正常に動作していることですが、組み合わせ実行している場合のみ、最初は成功し、残りは失敗します。基本的には最初のモックだけがセットアップ/使用されているようです。私はこれが、輸入されたクラスのコピーを取っているという見解とは関係があると思いますか?
このようなバックエンドクラスをモックするベストプラクティスはいつですか?
ポール
私が刺しを取り、あなたのテストが等冪な振る舞いされていないことを言うつもりです。どのようにテストしているかに基づいて、setUpとtearDownの中のものを適切に処理していることを確認する必要があります。たぶん、あなたは毎回リセットされていないクラスのインスタンスに影響を与えているクラスレベルで保持されている何かを持っているでしょうか? – idjaw