私はdjangoと単体テストの両方に不慣れで、モデルの単体テストを構築しようとしていますが、いくつかの問題があります。
私はいくつかのモデルを密接に連携させています:
Resource
ファイルリソースを維持します
MetadataField
リソースに追加できるメタデータ フィールドを表し、フィールドでいっぱいのテーブルに対応します
MetadataValue
MetadataField ID をリソース ID および対応する値と照合します。これは、Resource - MetadataField 多対多関係の中間テーブルです。
MetadataSchema
多くの からなるスキーマを表しますMetadataFields
。それぞれResource
が割り当てられ、MetadataSchema
どのコントロールMetadataFields
によって表されるかを制御します
関係:
Resource - MetadataField : Many-to-Many through MetadataValue
MetadataValue - MetadataSchema : Many-to-Many
Resource - MetadataSchema : One-to-Many
これらのモデルを処理するためのテストの書き方がわかりません。Test Driven Djangoチュートリアルのモデル テストでは、ほとんどの場合、オブジェクトの初期化と属性の検証がカバーされているようです。これらのオブジェクトのセットアップを行うと、他のすべてのオブジェクトを使用する必要があるため、テストはすべて、テストすることを意図していないコードに依存します。たとえば、リソースを作成する場合は、メタデータ スキーマとそのスキーマ内のフィールドの値も割り当てる必要があります。
私はdjangoで単体テストされたモデルの良い例を探しましたが、何も見つけることができませんでした(djangoのWebサイトには単体テストがないようです.これらのプロジェクトはすべて、テストが不十分/不足しているか、いくつかのケースで発生しています.テストは良好ですが、モデルはほとんど使用されていません。
私が見る可能なアプローチは次のとおりです。
- 多くのモッキングを行って、1 つのクラスのみをテストしていることを確認し、モデルの単体テストを非常にシンプルに保ち、メソッド/属性のみをテストしますが、関係が正しく機能していることは確認しません。次に、より高いレベルの統合テストに依存して、関係などの問題を検出します。
- 他の機能に依存するユニットテストを設計し、障害が発生した場所を簡単に確認できる場合は、1 つの関数の中断によって複数のテストが中断されることを受け入れます。したがって、リソースに を正常に追加できるかどうかをテストするメソッドが必要になる可能性があります。
MetadataValue
これには、少なくとも 1 つの と を設定する必要がありMetadataSchema
ますResource
。次に、try - except
ブロックを使用して、実際にテストしようとしているものを処理するアサーションの前にテストが失敗した場合、障害が別の場所にあることを示唆する特定のエラー メッセージが表示されるようにすることができます。このようにして、複数の失敗したテスト メッセージをすばやくスキャンして、本当の原因を見つけることができました。ただし、すべてのテストでこの分離を確実に行うことはできません。
私はこれを理解するのに苦労しているので、これがすべて理にかなっているのかどうかはわかりませんが、この種の状況のベストプラクティスがあれば教えてください! ありがとう