今天要介紹第二篇的mocks主要是利用python 物件導向的特性
我們測試網站總是不會只測試一個 ,這時就可以把你要測試的網址拉出來成一個獨立的檔
constants.py file 裡面我們建立一個變數BASE_URL
並撰寫一個service 去判斷 它的response是否 正確
這service 可以讓我們延伸之後可能要測的網站,可以省去一直去改測的網址
!
然後在主檔判斷 mock 是否 return a response OK
測試驅動最奧妙的地方就是取決於您也可以將測試寫得更完善一點如下
1.可以使用 decorator 當測試函數中的所有邏輯都需要模擬時
2.使用一個內容管理(context manager) 當測試中的某些程式使用模擬而其他代碼必須引用實際函數時
(e.g 利用service來判斷影用函數式base_url)
3.當需要在多個測試啟動和停止模擬函數時(例如測試類中的setUp()和tearDown()函數)
必須使用修補程序patcher
直接上程式碼
在這兩天的學習中,簡單的做了一個基本的模擬並測試了一個簡單的assertion - get_todos()函數是否返回None。 get_todos()函數調用外部API並接收響應。
如果測試成功,則該response ok (200),該對象包含一個JSON序列化的todolist ;如果請求失敗,get_todos()將返回None
patch()的工作原理:它提供一個你想要模擬的函數的路徑,找到函數patch()創建一個Mock對象,真實函數暫時替換為mock,當測試調用get_todos()時,函數使用mock_get的方式與使用真實get()方法的方式相同
其實在研究深一點我們還可以測試JSON序列化的字符串內容是否轉換為Python數據類型(例如列表或字典)