前言

我們昨天稍微寫了一些test來測試我們的Todolist,那當中下了很多次djang去run test的指令
‘python manage.py test’
今天就來看看這個指令做了些什麼事吧!

正題

先來稍微看一下python unittest怎麼寫,因為django的test也是建立在unittest之上的

接下來~
老樣子的到core management commands下的test.py看handle function

第一行的TestRunner從settings過來的,我想大家也都很熟悉了直接到
django.conf.global_settings.py下找到TEST_RUNNER

然後就可以找到DiscoverRunner

接著往下看

這邊可以看到他有setup環境 db等等,我們看看最重要的run test部分~

這邊的runner就是unittest中的runner了

而這個run就看最重要的地方吧

這邊的test就是我們剛剛傳進來的suite
那我們就來看看suite被call的時候會做什麼事吧!
看到call就要聯想到__call__

再看run

這邊就可以看到test運行前呢會先觸發class setup,結束會tear down~
然後接著看當中的test

一樣__call__

再往下

這邊也處理了很多東西
當中的super.__call__(result)就不多看了,裡面也是滿多東西XD

最後就來畫個久久沒畫的圖吧~

結語

test也是博大精深的學問,其實有時候光是想test要怎麼寫就花了一些時間,但有test的保護下自己交付出去的程式碼也相對能有信心!最後在好奇心的驅使下去看了django test的過程~起初是想要了解setUp, setUpClass, tearDown, tearDownClass的關聯,後面就把test整個巡過了一遍,挺有趣的!