Python單元測試模塊doctest的具體使用
開發(fā)高質(zhì)量軟件的過程中,我們經(jīng)常會為每個函數(shù)編寫測試,這樣在開發(fā)過程中運行這些測試的時候就比較方便,doctest是一個python標準庫自帶的輕量單元測試工具,適合實現(xiàn)一些簡單的單元測試。
doctest模塊提供的這樣的工具,用于掃描模塊并驗證程序文檔字符串中嵌入的測試,在docstring中尋找到測試用例并執(zhí)行,比較輸出結(jié)果與期望值是否符合。
我們?nèi)绾螛?gòu)造這些測試呢?很簡單
在python的交互解釋器中創(chuàng)建測試用例,并復制到docstring中
tip:doctest在docstring中尋找測試用例的時候,認為>>>是一個測試用例的開始,直到遇到空行或者下一個>>>,在兩個測試用例之間有其他內(nèi)容的話,會被doctest忽略(可以利用這個特性為測試用例編寫一些注釋)。
我先在我自己的項目下準備一個測試腳本quality_q.py:
def average(values): """Computes the arithmetic mean of a list of numbers. >>> print(average([20, 30, 70])) 40.0 """ return sum(values) / len(values) # if __name__ == '__main__': import doctest doctest.testmod(verbose=True) # automatically validate the embedded tests # 那個verbose參數(shù),如果設置為True則在執(zhí)行測試的時候會輸出詳細信息。 # 默認是False,表示運行測試時,只有失敗的用例會輸出詳細信息,成功的測試用例不會輸入任何信息。
啟動測試的方法:
第一個是在__main__函數(shù)中調(diào)用了doctest.testmod()方法。
然后在交互解釋器中執(zhí)行運行腳本 python3 doctest_q.py
如果__main__函數(shù)有其他用途,不方便調(diào)用doctest.testmod()方法,那么可以用另外一種執(zhí)行測試的方法:
在交互解釋器中執(zhí)行如下命令執(zhí)行測試: python3 -m doctest doctest_q.py -v
這里 -m 表示引用一個模塊,-v 等價于 verbose=True
因為我是在Pycharm中創(chuàng)建的文件,我就直接打開Pycharm的Terminal,然后在交互解釋器中切換一下腳本目錄,執(zhí)行的上面說到的啟動方式,(順便復習一下os模塊的常用操作)
ps:讀者在測試自己的例子時只需注意一下自己的當前工作目錄即可
看一下最后的結(jié)果:
➜ ForF python3
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getcwd()
'/Users/dengjiguang/PycharmProjects/ForF'
>>> os.chdir('/Users/dengjiguang/PycharmProjects/ForF'+'/python_sample/quality_control')
>>> os.system('python3 -m doctest doctest_q.py -v')
Trying:
print(average([20, 30, 70]))
Expecting:
40.0
ok
1 items had no tests:
doctest_q
1 items passed all tests:
1 tests in doctest_q.average
1 tests in 2 items.
1 passed and 0 failed.
Test passed.
0
>>>
os.getcwd():返回當前的工作目錄
os.chdir(‘path'):切換工作目錄
os.system(‘command'): 執(zhí)行系統(tǒng)shell命令
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python ansible自動化運維工具執(zhí)行流程
ansible是基于 paramiko 開發(fā)的,并且基于模塊化工作,本身沒有批量部署的能力,接下來通過本文給大家分享python ansible自動化運維工具的特點及執(zhí)行流程,感興趣的朋友跟隨小編一起看看吧2021-06-06
使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析
這篇文章主要介紹了使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
pytorch lstm gru rnn 得到每個state輸出的操作
這篇文章主要介紹了pytorch lstm gru rnn 得到每個state輸出的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
Python依賴管理及打包工具Poetry使用規(guī)范
這篇文章主要為大家介紹了Python依賴管理及打包工具Poetry的依賴規(guī)范,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-09-09
django框架中ajax的使用及避開CSRF 驗證的方式詳解
這篇文章主要介紹了django框架中ajax的使用及避開CSRF 驗證的方式,結(jié)合實例形式分析了Django框架ajax后臺交互與排除驗證csrf相關(guān)操作技巧,需要的朋友可以參考下2019-12-12

