Djangoアプリを想像上の名前で モックテストライブラリ を使用してテストしているときに、モックを作成しようとしています。これをしようとしています:
models.py
from somelib import FooClass
class Promotion(models.Model):
foo = models.ForeignKey(FooClass)
def bar(self):
print "Do something I don't want!"
test.py
class ViewsDoSomething(TestCase):
view = 'my_app.views.do_something'
def test_enter_promotion(self):
@patch.object(my_app.models.FooClass, 'bar')
def fake_bar(self, mock_my_method):
print "Do something I want!"
return True
self.client.get(reverse(view))
何が間違っていますか?
ああ、そのパッチデコレータをどこに適用するのか混乱していました。一定:
class ViewsDoSomething(TestCase):
view = 'my_app.views.do_something'
@patch.object(my_app.models.FooClass, 'bar')
def test_enter_promotion(self, mock_method):
self.client.get(reverse(view))
キットの答えに追加するには、patch.object()
に3番目の引数を指定すると、モックされたオブジェクト/メソッドを指定できます。それ以外の場合、デフォルトのMagicMock
オブジェクトが使用されます。
_ def fake_bar(self):
print "Do something I want!"
return True
@patch.object(my_app.models.FooClass, 'bar', fake_bar)
def test_enter_promotion(self):
self.client.get(reverse(view))
# Do something I want!
_
モックオブジェクトを指定すると、デフォルトのMagicMock()
はno(パッチされたオブジェクトに渡されます)もはや:
_def test_enter_promotion(self, mock_method):
_
代わりに:
_def test_enter_promotion(self):
_
http://www.voidspace.org.uk/python/mock/patch.html#patch-object