認識Python中易用的單元測試模塊doctest

開發高質量軟件的過程中,我們經常會爲每個函數編寫測試,這樣在開發過程中運行這些測試的時候就比較方便,doctest是一個python標準庫自帶的輕量單元測試工具,適合實現一些簡單的單元測試。

doctest模塊提供的這樣的工具,用於掃描模塊並驗證程序文檔字符串中嵌入的測試,在docstring中尋找到測試用例並執行,比較輸出結果與期望值是否符合。
我們如何構造這些測試呢?很簡單

  1. 在python的交互解釋器中創建測試用例,在解釋器中測試的用例,複製粘貼到docstring中。
    注:要完全的複製,不要自己在docstring中寫用例, 那樣容易出錯,比如解釋器中>>>提示符後的一個空格,如果自己直接寫測試用例時缺少這個空格,就會報錯!

tip:doctest在docstring中尋找測試用例的時候,認爲>>>是一個測試用例的開始,直到遇到空行或者下一個>>>,在兩個測試用例之間有其他內容的話,會被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參數,如果設置爲True則在執行測試的時候會輸出詳細信息。
    # 默認是False,表示運行測試時,只有失敗的用例會輸出詳細信息,成功的測試用例不會輸入任何信息。

啓動測試的方法:

  1. 第一個是在__main__函數中調用了doctest.testmod()方法。
    然後在交互解釋器中執行運行腳本 python3 doctest_q.py

如果__main__函數有其他用途,不方便調用doctest.testmod()方法,那麼可以用另外一種執行測試的方法:

  1. 在交互解釋器中執行如下命令執行測試: python3 -m doctest doctest_q.py -v
    這裏 -m 表示引用一個模塊,-v 等價於 verbose=True

因爲我是在Pycharm中創建的文件,我就直接打開Pycharm的Terminal,然後在交互解釋器中切換一下腳本目錄,執行的上面說到的啓動方式,(順便複習一下os模塊的常用操作)
ps:讀者在測試自己的例子時只需注意一下自己的當前工作目錄即可

看一下最後的結果:

➜  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’): 執行系統shell命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章