2

mock.patch でフォームをモックしようとしましたが、できません。私はこのコードを持っています

フォーム.py

class CreatePostForm(object):
    pass

ビュー.py:

from forms import CreatePostForm

def doit():
    print CreatePostForm()

このビューを個別にテストしたいと思います。私は mock.patch でフォームにパッチを当てようとしましたが、そのようなものを書きました:

tests.py:

from mock import patch

import views

with patch('forms.CreatePostForm') as Form:
    views.doit()

解決策をグーグルで検索しようとしましたが、何も見つかりませんでした

回答済み: @dstanek に感謝します。良い答えとコードの良いサンプル

4

1 に答える 1

5

patch を使用するときは、モックしたいオブジェクトのターゲットを指定します。これは通常、定義された場所ではなく、インポートされた場所です。

これは、テストが実行されるまでに、viewsモジュールが既にインポートされているためです。以下の例で行っているようにクラスをインポートする場合、viewsモジュールにはforms.CreatePostForm. したがって、変更forms.CreatePostFormしてもこの参照は変更されません。ビューで指定されたとおりにモジュールをインポートすると、状況が異なりforms.CreatePostFormます。

以下に非常に最小限の例を含めました。

フォーム.py

class CreatePostForm(object):
    pass

ビュー.py:

from forms import CreatePostForm

def doit():
    print CreatePostForm()

tests.py:

from mock import patch

import views

with patch('views.CreatePostForm') as Form:
    views.doit()
于 2013-03-19T15:27:58.987 に答える