どのように失敗することを意味するdjangoのテストを書くか?
2023-09-21 02:13:09
質問
というモデルを持っています。
Thing
という属性があり
name
という属性があり、name は char フィールドで
のみ
3文字の長さです。
どのようにテストを書けばいいのでしょうか?
class TestCase1(TestCase):
def test1(self):
thing = Thing(name='1234')
というテストは失敗するはずです。どのようにテストを正しく書けば、テストが を通過します。 を通過させるためには、どのようにテストを書けばよいのでしょうか?
どのように解決するのですか?
Thing(name='1234')が例外を発生させることを期待している場合、2つの対処方法があります。
一つは Django の assertRaises (実際には unittest/unittest2 のもの) を使うことです。
def mytest(self):
self.assertRaises(FooException, Thing, name='1234')
これはThing(name='1234')がFooExceptionエラーを発生させない限り失敗します。 もう一つの方法は、このように期待される例外をキャッチし、それが起こらなかった場合に例外を発生させることです。
def mytest(self):
try:
thing = Thing(name='1234')
self.fail("your message here")
except FooException:
pass
明らかに、FooExceptionを、長すぎる文字列でオブジェクトを作成することで得られると予想されるものに置き換えてください。 ValidationErrorでしょうか?
3つ目の選択肢(Python 2.7時点)は、コンテキストマネージャとしてassertRaisesを使用することで、よりクリーンで読みやすいコードになります。
def mytest(self):
with self.assertRaises(FooException):
thing = Thing(name='1234')
悲しいことに、これではテストの失敗メッセージをカスタマイズすることができないので、テストをきちんと文書化しましょう。 参照 https://hg.python.org/cpython/file/2.7/Lib/unittest/case.py#l97 を参照してください。
関連
-
[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?
-
[解決済み] NoReverseMatchエラーとは何ですか、またどのように修正しますか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Django のビューで 2 つ以上のクエリセットを結合するにはどうすればよいですか?
-
[解決済み] TDDのためのJavaScriptユニットテストツール
-
[解決済み] Djangoのバージョンを確認する方法
-
[解決済み] Jasmineで'Error'が投げられることを期待するテストを書くには、どうすればよいですか?
-
[解決済み] (13: Permission denied) 上流:[nginx]に接続中。
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] Django REST フレームワークでフィールド名を変更する方法
最新
-
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 のクエリセット操作
-
[解決済み] Django のビューで 2 つ以上のクエリセットを結合するにはどうすればよいですか?
-
[解決済み] django の OneToOneField と ForeignKey の違いは何ですか?
-
[解決済み】シグナル使用時にTransactionManagementError「'atomic'ブロックの終了までクエリを実行できない」がユニットテスト時のみ発生する。
-
[解決済み] Django South - テーブルはすでに存在する
-
[解決済み] Djangoです。文字列からモデルを取得する?
-
[解決済み] Djangoアプリの命名規則はありますか?
-
[解決済み] 学習に適したオープンソースのdjangoプロジェクト【非公開
-
[解決済み] dbなしのdjangoユニットテスト
-
[解決済み] Django の日付テンプレートのデフォルトフォーマットを変更するには?