[解決済み] Djangoで異なる設定でUnitテストを行うには?
質問
ユニットテストの Django 設定をオーバーライドするための簡単なメカニズムはありますか? 私のモデルの1つに、最新のオブジェクトの特定の数を返すマネージャがあります。 返すオブジェクトの数は NUM_LATEST 設定で定義されています。
これは、誰かが設定を変更した場合に、私のテストを失敗させる可能性があります。 どのようにすれば
setUp()
で設定を上書きし、その後
tearDown()
? それが可能でない場合、私はメソッドをモンキーパッチまたは設定を模倣することができる何らかの方法がありますか?
EDITです。 以下は私のマネージャーコードです。
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) の設定を変更したい場合、(2) の設定を変更したい場合に適用されます。 小さい の数 特定 のテストを行います。
Django 1.4 からは、テスト中に設定を上書きする方法があります。 https://docs.djangoproject.com/en/stable/topics/testing/tools/#overriding-settings
TestCase
には
self.settings
コンテキスト・マネージャがあり、さらに
@override_settings
デコレータも用意されており、テストメソッドあるいは
TestCase
サブクラス全体に適用できます。
これらの機能は Django 1.3 ではまだ存在しませんでした。
の設定を変更したい場合 全て の設定を変更したい場合、テストのために別の設定ファイルを作成し、メインの設定ファイルから設定をロードして上書きできるようにしたいと思うでしょう。他の回答でこれに対するいくつかの良いアプローチがあります; 私は両方の成功したバリエーションを見ました hspanderの と dmitrii の のアプローチになります。
関連
-
[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?
-
[解決済み] Django のビューで 2 つ以上のクエリセットを結合するにはどうすればよいですか?
-
[解決済み] Djangoのバージョンを確認する方法
-
[解決済み] Gradleを使用して1つのユニットテストクラスのみを実行する方法
-
[解決済み] 抽象クラスをユニットテストする方法:スタブで拡張する?
-
[解決済み] Django で完全な/絶対的な URL (ドメイン付き) を取得するにはどうすればよいですか?
-
[解決済み] Djangoでローカルと本番の設定を管理する方法とは?
-
[解決済み] Django が ManyToMany リレーションシップからオブジェクトを取り除く
-
[解決済み] django のモデルのクラス名を取得する
-
[解決済み] ブロック %} に上書きではなく、追加することはできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
django request.data を修正する AttributeError: 属性を設定できない
-
Django の ForeignKey パラメータの使用法
-
Djangoキャッシュの説明
-
[解決済み] pipと要件ファイルを使って、特定のパッケージをアップグレードするにはどうすればよいですか?
-
[解決済み] (13: Permission denied) 上流:[nginx]に接続中。
-
[解決済み] Djangoです。文字列からモデルを取得する?
-
[解決済み] django のクラスベースのビューで permission_required デコレータを使用する方法
-
[解決済み] Django Forms: 有効でない場合、エラーメッセージとともにフォームを表示する
-
[解決済み] Django 1.9 の apps.py の目的は何ですか?
-
[解決済み] Django はフォームが初期化された後にフィールドの値を設定します。