5.1 First test
parent
c7cb960daa
commit
550eed5dad
|
@ -417,3 +417,73 @@ class ResultsView(generic.DetailView):
|
|||
* 我们提供 context_object_name 属性,表示我们想使用 latest_question_list
|
||||
|
||||
重启服务器后,就是新的投票应用(同样的html),但是内部用了generic view
|
||||
|
||||
## Part 5 Automated Test
|
||||
|
||||
TDD with python. Always stick to it.
|
||||
|
||||
### 5.1 First test
|
||||
|
||||
#### Create/Verify a bug
|
||||
|
||||
幸运的是,我们的 polls 应用现在就有一个小 bug 需要被修复:我们的要求是如果 Question 是在一天之内发布的, Question.was_published_recently() 方法将会返回 True ,然而现在这个方法在 Question 的 pub_date 字段比当前时间还晚时也会返回 True(这是个 Bug)。
|
||||
|
||||
确认bug:
|
||||
|
||||
```
|
||||
>>> import datetime
|
||||
>>> from django.utils import timezone
|
||||
>>> from polls.models import Question
|
||||
>>> # create a Question instance with pub_date 30 days in the future
|
||||
>>> future_question = Question(pub_date=timezone.now() + datetime.timedelta(days=30))
|
||||
>>> # was it published recently?
|
||||
>>> future_question.was_published_recently()
|
||||
True
|
||||
```
|
||||
|
||||
#### Create a test to verify this bug
|
||||
|
||||
All tests (polls/tests.py) are in app directory
|
||||
|
||||
```python
|
||||
import datetime
|
||||
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
|
||||
from .models import Question
|
||||
|
||||
class QuestionModelTests(TestCase):
|
||||
|
||||
def test_was_published_recently_with_future_question(self):
|
||||
"""
|
||||
was_published_recently() returns False for questions whose pub_date is in future
|
||||
"""
|
||||
|
||||
time = timezone.now() + datetime.timedelta(days=30)
|
||||
future_question = Question(pub_date=time)
|
||||
self.assertIs(future_question.was_published_recently(), False)
|
||||
```
|
||||
|
||||
Result
|
||||
|
||||
```
|
||||
python manage.py test polls
|
||||
Creating test database for alias 'default'...
|
||||
System check identified no issues (0 silenced).
|
||||
F
|
||||
======================================================================
|
||||
FAIL: test_was_published_recently_with_future_question (polls.tests.QuestionModelTests)
|
||||
was_published_recently() returns False for questions whose pub_date is in future
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/jason/HomeWorkstation/SynologyGiteaSpace/djangoproject/src/polls/tests.py", line 17, in test_was_published_recently_with_future_question
|
||||
self.assertIs(future_question.was_published_recently(), False)
|
||||
AssertionError: True is not False
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 1 test in 0.001s
|
||||
|
||||
FAILED (failures=1)
|
||||
Destroying test database for alias 'default'...
|
||||
```
|
|
@ -1,3 +1,17 @@
|
|||
from django.test import TestCase
|
||||
import datetime
|
||||
|
||||
# Create your tests here.
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
|
||||
from .models import Question
|
||||
|
||||
class QuestionModelTests(TestCase):
|
||||
|
||||
def test_was_published_recently_with_future_question(self):
|
||||
"""
|
||||
was_published_recently() returns False for questions whose pub_date is in future
|
||||
"""
|
||||
|
||||
time = timezone.now() + datetime.timedelta(days=30)
|
||||
future_question = Question(pub_date=time)
|
||||
self.assertIs(future_question.was_published_recently(), False)
|
Loading…
Reference in New Issue