web-dev-qa-db-ja.com

Django Test RequestFactory vs Client

ビューをテストするためにDjangoのClientまたはRequestFactoryのどちらを使用すべきかを判断しようとしています。

私はDjangoRESTFrameworkを使用してサーバーを作成していますが、これまでのところ本当に簡単です:

class SimpleModelList(generics.ListCreateAPIView):
    """
    Retrieve list of all route_areas or create a new one.
    """
    queryset = SimpleModel.objects.all()
    serializer_class = SimpleModelSerializer
    filter_backends = (IsOwnerFilterBackend,)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

DjangoのClientRequestFactoryを使用したテストの違いと、RESTサーバーをテストするのに適しているアプローチの方が適しています)より良い)?

システムのカバレッジを向上させるために、両方でテストを作成する必要がありますか?

40
t.pimentel

RequestFactoryClientには、非常に異なるユースケースがあります。単一の文に入れるには、RequestFactoryrequestを返し、Clientresponseを返します。

RequestFactoryは、それが言うことをします-requestオブジェクトを作成するファクトリです。これ以上でもそれ以下でもありません。

Clientは、完全な要求/応答サイクルを偽造するために使用されます。 requestオブジェクトを作成し、WSGIハンドラーに渡します。このハンドラーはURLを解決し、適切なミドルウェアを呼び出し、ビューを実行します。次に、応答オブジェクトを返します。さらに、テストに非常に役立つresponseオブジェクトに関する追加データを収集するという利点もあります。

RequestFactoryは実際にはどのコードにも触れませんが、requestオブジェクトを使用して、有効なrequestを必要とするコードの一部をテストできます。 Clientはビューを実行するため、ビューをテストするには、Clientを使用して応答を検査する必要があります。必ずClientの-​​ ドキュメント をチェックしてください。

60
knbk