django :: вызов промежуточного программного обеспечения в тестах - PullRequest
9 голосов
/ 30 ноября 2010

У меня есть функция промежуточного программного обеспечения, которая определяет 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 )

но это похоже на взлом.Что если тестируемое промежуточное ПО зависит от другого промежуточного ПО?

</ Возможности>

Ответы [ 2 ]

3 голосов
/ 29 декабря 2010

Я видел ваше "ручное" решение, но я предлагаю вам рассмотреть возможность использования тестового клиента, описанного здесь:

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

Что касается зависимости промежуточного программного обеспечения, вы можете рассмотреть возможность насмешекэто промежуточное ПО.

0 голосов
/ 17 марта 2011

Сверху головы (сейчас я не могу проверить эту идею, но у меня та же проблема, что и у вас): было бы решением включить контекстный процессор, который просто возвращает переменные запросавставлен компонентом промежуточного программного обеспечения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...