2017-10-03 7 views
1

タイトルはそれをすべて言います。私は何をしようとしているのかを示して質問を説明します。Djangoユニットテストでモックモデルを宣言する方法はありますか?

私は重要ではありません詳細は、Resourcesで作業するためにそのclean()方法に組み込まれたいくつかの機能を持っているResourceFormを作成するためのDjangoのModelFormクラスを拡張してきました。 ResourceFormは基本的にライブラリクラスであり、ResourceFormクラスが定義されているモデルはアプリにないため、アプリから既存のモデルを使用することはできません(例:mock.Mock(spec=SomeModel)はオプションではありません)。

私はユニットテストResourceFormにしようとしていますが、私はModelFormからResourceForm継承しているので必要ですジャンゴModelを、模擬ための正しい方法を把握することはできません。これは私が試してみましたいくつかの取り組みの一つである(この場合はmockを使用していないが、それが試みられているものを例示するのに役立つ):

class ResourceFormTestCase(TestCase): 

    class SampleModel(Model): 
     sample_field = CharField() 

    class SampleResourceForm(ResourceForm): 
     class Meta(): 
      model = SampleModel 
      fields = ['sample_field'] 

    def test_unsupported_field_raise_validation_error(self): 
     print('Test validation error is raised when unsupported field is provided') 
     form_data = {'sample_field': 'FooBar', 'unsupported_field': 'Baz'} 
     form = self.SampleResourceForm(data=form_data) 

をしかし、それは発生します

RuntimeError: Model class customer.tests.tests_lib_restless_ext.SampleModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS. 

私は開いていますどのように私はこれをテストしようとしている方法でオフになっている場合の提案に。

答えて

0

最も簡単なことは、Djangoに付属のuser modelを使用することです。

これが受け入れられない場合は、Django配管を十分にパッチして、データベース接続なしで単体テストを実行して実行するようにしました。 django_mock_queries projectを見て、それが役立つかどうか確認してください。

関連する問題