10

を定義するミドルウェア関数がありますrequest.foo。テストしたい関数は、ミドルウェアから定義されている foo に依存しています。テスト中にミドルウェアが実行されないため、どのように機能をテストしますか?

実際には、リクエストを受け取り、すべてのミドルウェアを順番に実行してから、最終的なリクエストを吐き出す関数が必要です (ビューに渡されたときと同じように)。そのような機能は存在しますか?

ミドルウェア関数を手動で呼び出すこともできますが、それはハックのようです。テスト対象のミドルウェアが別のミドルウェアに依存している場合はどうなりますか? 「ミドルウェア地獄」にぶち当たります。

<例>

ミドルウェア機能:

class FooMiddleware():
    def process_request(self, request):
        req.foo = True if req.session.get('foo') in [1,2,3,4,5,6,7,8,9,10] else False

テストしたい関数は次のとおりです。

def getBaz(request):
    if request.foo == True:
        return something()
    else:
        return somethingElse()

どのようにテストしgetBazますか?

< /例 >

<可能性>

ミドルウェアを手動で実行できます。

def test_getBaz(self):
    request = HttpRequest('/blarg')
    request.session['foo'] = 2

    middleware = FooMiddleware()
    request = middleware.process_request(request)

    value = getBaz(request)
    assertEqual( value, expected )

しかし、それはハックのようです。テスト対象のミドルウェアが別のミドルウェアに依存している場合はどうなりますか?

</可能性>

4

2 に答える 2

3

あなたの「手動」ソリューションを見てきましたが、ここで説明されているテスト クライアントの使用を検討することをお勧めします。

http://docs.djangoproject.com/en/1.2/topics/testing/#testing-tools

ミドルウェアの依存関係については、そのミドルウェアをモックすることを検討してください。

于 2010-12-29T18:41:51.143 に答える
0

私の頭の上から(私は今このアイデアをテストすることはできませんが、あなたと同じ問題を抱えています):それは単にによって挿入されたリクエスト変数を返すコンテキストプロセッサを含めるための解決策でしょうか?ミドルウェアコンポーネント?

于 2011-03-17T15:20:41.697 に答える