2015-08-14 7 views
1

Я пытаюсь написать модульный тест, но я новичок в django и не знаю, как проверить эту функцию. Все, насколько я могу судить, работает при тестировании вручную, но было рекомендовано написать для него единичный тест.Как написать Unit Test в Django

У меня есть эта функция:

def time_encode(hours): 
    now = timezone.now().replace(second=0, microsecond=0) 
    remainder = now.minute % 15 
    delta = (15 - remainder) 
    timeFrom = now + timedelta(minutes=delta) 
    timeTo = timeFrom + timedelta(hours=hours) 
    return (timeFrom, timeTo) 

Это вызывается с этой точки зрения:

@csrf_exempt 
def emulate_create(request): 
    args = json.loads(request.body, object_hook=utils._datetime_decoder) 
    resourceId, count, hours = args['resourceId'], args['count'], args['hours'] 
    print resourceId 
    timeFrom, timeTo = utils.time_encode(hours) 
    print timeFrom 
    reservation = ReservationProspect(
     byUser=request.user, 
     forUser=request.user, 
     resource=get_object_or_404(Resource, uuid=resourceId), 
     modality=get_object_or_404(Modality, name="online"), 
     timeFrom=timeFrom, 
     timeTo=timeTo, 
     count=count 
    ) 

    return HttpResponse(
     json.dumps(
      [reservation.toDict()], 
      default=utils._datetime_encoder 
     ) 
    ) 

Я чувствую, что я не должен проверить материал в представлении, но я должен проверить функцию time_encode для нескольких тестовых случаев, так как его цель - вернуть timeFrom на ближайший 15-минутный интервал в будущем и timeTo, который является параметром «часов» вдали от timeFrom. Также важно, чтобы дата-время всегда возвращалось с секундами и миллисекундами в ноль. Каковы были бы ваши предложения относительно того, как пройти тестирование этого кода?

+0

Перед тем, как добавить тест, вы должны добавить строку документации, объясняющий назначение функции. –

ответ

1

Я думаю, что я хотел бы написать по крайней мере два модульные тесты для функции (один проверка, является ли для данного входа, ожидаемый выход генерируется.

Затем дополнительно я хотел бы написать несколько тестов для самого представления, например, делает это генерировать ожидаемый выход? это 404 возвращается, когда ожидается?

Я хотел бы также подумать о тестировании этого класса ReservationProspect в случае, если это твое.

Довольно куча тестов, но я обычно следить за развитием тестов и писать тесты в Если это возможно, это будет полезно для меня.

... и они, как, если ваш вопрос о тестировании Django/Python является более общим - Django имеет некоторые хорошие вещи на их веб-страницы https://docs.djangoproject.com/en/1.8/topics/testing/overview/ и в учебнике: https://docs.djangoproject.com/en/1.8/intro/tutorial05/

from django.test import TestCase 
class ViewTest(TestCase): 

    def test_view_returns_OK(self): 
     response = self.client.get('/') 
     self.assertEqual(response.status_code,200) 

class FunctionTest(TestCase): 

    def test_function_returns_expected_result(self): 
     response = time_encode(10) 
     expected = "XYZ" 
     self.assertEqual(response, expected) 

Что касается вашего комментария о импорте:

from utils import time_encode 

- после того, как выше импорта вы можете использовать его как time_encode

import utils 

- после того, как выше импорта вы должны использовать его в качестве utils.time_encode

+0

Да, у вас есть пример синтаксиса для теста функции/представления? – james

+0

, если вы хотите стать еще более продвинутым, отличная книга: http://chimera.labs.oreilly.com/books/1234000000754 Вы можете попробовать ее здесь бесплатно. – wisnia

+0

Просто отредактирован с помощью простых примеров. Не забудьте запустить тестовые функции с тестом, без этого они скорее вспомогательные функции и не будут запускаться с помощью «manage.py test app» – wisnia