Python: модульное тестирование на изменения даты - PullRequest
1 голос
/ 15 декабря 2010

Я делал следующее для определения формы Django (смущенно, да):

class DealAdvancedSearchForm(forms.Form):
    weekday_choices = [
        ['monday', 'Monday'],
        ['tuesday', 'Tuesday'],
        ['wednesday', 'Wednesday'],
        ['thursday', 'Thursday'],
        ['friday', 'Friday'],
        ['saturday', 'Saturday'],
        ['sunday', 'Sunday'],
    ]
    weekday_index = date.today().weekday()
    weekday_choices[weekday_index][1] += ' (Today)' 
    weekday_choices[weekday_index+1][1] += ' (Tomorrow)'
    weekday = forms.ChoiceField(label='Day of the week', choices=weekday_choices, required=False)

Как вы, наверное, уже догадались, это работает нормально, пока date.today() не изменится. Все мои тесты пройдены. Однако после изменения даты она неправильно сохраняет выбор начальной даты, помеченный как сегодняшний.

С тех пор я выяснил, насколько это глупо, и переместил код в метод __init__.

Теперь я хочу написать тест для него. Кто-нибудь знает, как я могу проверить, что правильный день недели помечается как (Today) при изменении даты?

1 Ответ

1 голос
/ 15 декабря 2010

Ошибка индекса за пределами границ:

Watch out for [weekday_index+1] for 'sunday', 
use [(weekday_index+1)%7] to wrap down to 0.  

Извлеките выбор в метод, чтобы облегчить его тестирование.Если метод содержит только python и не содержит django, его будет проще тестировать и, следовательно, легче понять.Я также согласен с тем, что вы должны создать __ init __ , сегодня , которые могут измениться в конце сегодняшнего дня и должны меняться в зависимости от этого.1011 *

РЕДАКТИРОВАТЬ:

  • В настоящее время ваш код выполняется ровно один раз.
  • Переместите логику для работы с экземпляром, а не на уровне класса.
  • Используйте библиотеку, такую ​​как MiniMock , чтобы высмеивать ответы от date.today (). Weekday ().
    • date.today () должен вернуть макет, который будет использовать returns_iter.
  • Создайте 2 формы и подтвердите, что их списки выбора соответствуют ожидаемым.
    • Один на сегодняшнюю дату, другой на завтра.
  • Вы можете издеваться и по тесту по модулю.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...