2017-06-23 5 views
0

誰も私がDjangoからModels.saveメソッドをテストするソリューションを見つけるのを手伝ってもらえますか? ここで私が興味を持っているのは、モデルが必要なすべての引数で保存されていることをテストすることです。 は、Djangoのmanage.pyモジュールPython - Django - Models.saveメソッド

class MyModel(models.Model): 

    myname = models.Charfield(max_length=10, null=False) 
    created = models.DateTimeField(null=False) 

    class Meta: 
     managed = False 

class MyModelTest(TestCase): 

    def test_create_my_model_instance(self): 
     my_model = Mock(autospec=MyModel) 
     instance = my_model(randomarg=10) 
     instance.save() 
     # here i´d want to assert if instance has the 
     # necessary arguments to save to db 
+0

質問が不明です。あなたは「必要な」議論をどのように定義していますか? –

+0

必要な引数によって、私はModelクラスで宣言されたすべての引数を意味します – user3682983

+0

しかし、なぜそれをテストする必要がありますか?どのような状況の下でそれが失敗する可能性がありますか?モデルの保存はDjangoの内部の一部であり、既存のDjangoテストスイートで十分にテストされています。 –

答えて

0

あなたはmymodelというをテストすることにより、管理されていない「レガシー」データベースを、It's、あなたはそれをからかっています。あなたは、テストしたくないものだけを模倣すべきです(例えば、あなたがやめようとするHTTP要求をする呼び出しを嘲笑)。

あなたが書いたテストは、それを除いて機能します。 saveを呼び出して、設定したフィールドが保存されていることを確認してください。

+0

私はMyModelを嘲笑していますbc私は実際にデータベースに保存しません。私は人口が多いと宣言したすべてのフィールドを持っていると主張するが、その方法を知らない。 – user3682983

+0

私は「テスト用のデータベースを使用しないでください」という道を歩んできました。それは疑わしい価値のテストを生み出しました。 モデルをインスタンス化するには、saveを呼び出さない限り、モデルをdbに保存せずにインスタンス化できる必要があります.Mockingは必要ありません。次に、あなたがしたいと思われるものは、モデルの__ dict __属性に関するアサーションを作成することです。 – krieghan