web-dev-qa-db-ja.com

Django Restフレームワークのテスト:APIRequestFactoryとAPIClient

テストに慣れていないので、Django(Django-rest-framework)でAPIをテストしようとしています。

私は自分のビュー、つまりAPIエンドポイントのテストを設定しています。ドキュメントを確認すると、APIRequestFactoryまたはAPIClientを使用できます。どちらも同じことをしているようです。

これら2つの違いは何ですか?また、どちらを使用する必要があるのはなぜですか?

25

Djangoで「標準」ビューをテストするためのツールとヘルパー を見ると、非常に類似したもの、 TestClientRequestFactory

RequestFactoryは、テストクライアントと同じAPIを共有します。ただし、RequestFactoryは、ブラウザーのように動作する代わりに、任意のビューの最初の引数として使用できる要求インスタンスを生成する方法を提供します。これは、他の関数をテストするのと同じ方法でビュー関数をテストできることを意味します。正確に既知の入力を備えたブラックボックスとして、特定の出力をテストします。

TestClientを使用すると、ユーザーがサイトを閲覧しているという観点からサイトを操作できます(ただし、Javascriptのテストはさらに別の話です)。このようにサイトをテストするとき、多くのことが関係します(セッション、ミドルウェア、URLルーティングなど)。したがって、これらは通常、サイトまたはAPIとの実際の相互作用を模倣するより統合的なテストです。

RequestFactoryを使用すると、非常に分離された方法でビューをテストできます。 URLを設定したり、ミドルウェアなどで発生することを気にしたりすることなく、リクエストを作成してビューをテストできます。したがって、これは通常の単体テストに近いものです。

とはいえ、どちらのタイプのテストも役立ちます。 APIが期待どおりに機能するかどうかの一般的な感覚をつかむために、おそらくAPIClientの使用を開始し、より複雑なビューに関してはRequestFactoriesを使用します。ただし、適切な組み合わせは、具体的なアプリケーションによって大きく異なります。

33
arie