Django で異なる設定でユニットテストを行うにはどうすればいいですか? 質問する

Django で異なる設定でユニットテストを行うにはどうすればいいですか? 質問する

ユニット テストの Django 設定をオーバーライドする簡単なメカニズムはありますか? モデルの 1 つに、特定の数の最新オブジェクトを返すマネージャーがあります。返されるオブジェクトの数は、NUM_LATEST 設定によって定義されます。

誰かが設定を変更した場合、テストが失敗する可能性があります。 の設定をオーバーライドしsetUp()、その後 に復元するにはtearDown()どうすればよいでしょうか。それが不可能な場合は、メソッドにモンキーパッチを適用したり、設定をモックしたりする方法はありますか。

編集:私のマネージャーコードは次のとおりです:

class LatestManager(models.Manager):
    """
    Returns a specific number of the most recent public Articles as defined by 
    the NEWS_LATEST_MAX setting.
    """
    def get_query_set(self):
        num_latest = getattr(settings, 'NEWS_NUM_LATEST', 10)
        return super(LatestManager, self).get_query_set().filter(is_public=True)[:num_latest]

マネージャーはsettings.NEWS_LATEST_MAXクエリセットをスライスするために使用します。 は、getattr()設定が存在しない場合にデフォルトを提供するために使用されます。

ベストアンサー1

編集:この回答は、設定を変更したい場合に適用されます小さいの数特定のテスト。

Django 1.4 以降では、テスト中に設定を上書きする方法があります。https://docs.djangoproject.com/en/stable/topics/testing/tools/#overriding-settings

TestCaseコンテキスト マネージャーがあり、テスト メソッドまたはサブクラス全体に適用できるデコレータself.settingsもあります。@override_settingsTestCase

これらの機能は Django 1.3 にはまだ存在しませんでした。

設定を変更したい場合は全てテストでは、テスト用に別の設定ファイルを作成し、メインの設定ファイルから設定を読み込んで上書きする必要があります。他の回答には、これに対するいくつかの良いアプローチがあります。私は両方で成功したバリエーションを見てきました。hspanderのそしてドミトリーのアプローチ。

おすすめ記事