how to write test in django
TRANSCRIPT
![Page 1: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/1.jpg)
How to write test
Shunsuke Hida飛田 俊介
in Django
![Page 2: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/2.jpg)
Geekhouse
![Page 3: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/3.jpg)
Shinjuku
Akihabara
![Page 4: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/4.jpg)
Castalia
![Page 5: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/5.jpg)
Goocus
![Page 6: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/6.jpg)
Django 1.7
Python 3. 4. 2
![Page 7: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/7.jpg)
Structure of test
![Page 8: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/8.jpg)
1. Preparedef test_de_lorean_get_people_back_to_the_future(self): de_lorean = DeLorean() brown, marty, jeniffer = Brown(), Marty(), Jeniffer() de_lorean.passengers = [brown, marty, jeniffer] de_lorean.run() self.assertIn(brown, __future__) self.assertIn(marty, __future__) self.assertIn(jeniffer, __future__)
![Page 9: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/9.jpg)
2. Rundef test_de_lorean_get_people_back_to_the_future(self): de_lorean = DeLorean() brown, marty, jeniffer = Brown(), Marty(), Jeniffer() de_lorean.passengers = [brown, marty, jeniffer] de_lorean.run() self.assertIn(brown, __future__) self.assertIn(marty, __future__) self.assertIn(jeniffer, __future__)
![Page 10: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/10.jpg)
3. Assertdef test_de_lorean_get_people_back_to_the_future(self): de_lorean = DeLorean() brown, marty, jeniffer = Brown(), Marty(), Jeniffer() de_lorean.passengers = [brown, marty, jeniffer] de_lorean.run() self.assertIn(brown, __future__) self.assertIn(marty, __future__) self.assertIn(jeniffer, __future__)
![Page 11: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/11.jpg)
What can you test?
![Page 12: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/12.jpg)
Request
Response
What can you test?
urls.py
Model
View
Template
View HTML etc…
url
Context
get, save
renderdispatch
Data
![Page 13: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/13.jpg)
Request
Response
What can you test?
urls.py
Model
View
Template
View HTML etc…
url
Context
get, save
renderdispatch
Data
![Page 14: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/14.jpg)
Request
Response
What can you test?
urls.py
Model
View
Template
View HTML etc…
url
Context
get, save
renderdispatch
Data
![Page 15: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/15.jpg)
RequestFactory
class HelloWorldTestCase(TestCase): def test_hello_world_template(self): factory = RequestFactory() request = factory.get('/') response = render( request, template_name='sample_app/hello_world.html', dictionary=dict(message='hello') ) self.assertContains(response, 'hello')
![Page 16: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/16.jpg)
Request
Response
What can you test?
urls.py
Model
View
Template
View HTML etc…
url
Context
get, save
renderdispatch
Data
![Page 17: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/17.jpg)
TestCase.client
class HelloWorldTestCase(TestCase): def test_hello_world_view(self): response = self.client.get('/sample_app/hello_world/') self.assertTemplateUsed(response, 'sample_app/hello_world.html') self.assertEqual(response.context['message'], 'Hello World')
![Page 18: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/18.jpg)
Mockunittest.mock (new in Python 3.3)
![Page 19: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/19.jpg)
Request
Response
What can you test?
urls.py
Model
View
Template
View HTML etc…
url
Context
get, save
renderdispatch
Data
![Page 20: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/20.jpg)
Mock - return_valueclass Chapter(models.Model): name = models.CharField(max_length=255) def get_name(self): return 'chapter ' + self.name
ChapterViewget_name
![Page 21: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/21.jpg)
Mock - return_value
@mock.patch('sample_app.models.Chapter.get_name') def test_get_name(self, mock_get_name): mock_get_name.return_value = ‘abc' chapter = ChapterFactory() # chapter.get_name() == ‘abc’
![Page 22: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/22.jpg)
Mock - assert_called_with
@mock.patch('sample_app.models.Chapter.get_name', autospec=True) def test_chapter_get_name_is_called(self, mock_get_name): chapter = ChapterFactory() # call chapter.get_name() somewhere mock_get_name.assert_called_with( chapter, prefix='chapter ' )
![Page 23: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/23.jpg)
Mock
Mocked ChapterView
get_name
assert_called_with
return_value
![Page 24: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/24.jpg)
See Also
Obey the Testing Goat!(Test Driven Development with Python)http://www.obeythetestinggoat.com/
Test of Django itselfhttps://github.com/django/django/tree/master/tests
![Page 25: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/25.jpg)
Can they go back to the future?
def test_de_lorean_get_people_back_to_the_future(self): de_lorean = DeLorean() brown, marty, jeniffer = Brown(), Marty(), Jeniffer() de_lorean.passengers = [brown, marty, jeniffer] de_lorean.run() self.assertIn(brown, __future__) self.assertIn(marty, __future__) self.assertIn(jeniffer, __future__)
TypeError: argument of type 'module' is not iterable__future__
![Page 26: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/26.jpg)
import typesimport __future__class IterableModule(types.ModuleType): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.people = [] def __iter__(self): return iter(self.people) class DeLorean(object): def __init__(self): self.passengers = [] def run(self): future = globals()['__future__'] = IterableModule('__future__') for passenger in self.passengers: future.people.append(passenger)
![Page 27: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/27.jpg)
import import class class
. ---------------------------------------------------------------------- Ran 1 test in 0.000s
OK
![Page 28: How to write test in Django](https://reader036.vdocuments.net/reader036/viewer/2022062308/55cb0d6abb61eb4f628b47c6/html5/thumbnails/28.jpg)
Thank you!