項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 search-input 尚未註冊或是沒有一個 view.php 檔案.

【Python 測試程式 #1】利用 doctest 測試 python testcase 的優雅寫法,適用於 leetcode (doctest in function,搭配 function 的用法)

前言

在 python 裡面,我們常需要在程式碼寫完時,測試程式碼功能是否正常,
「doctest」 這個套件雖然冷門,但使用時非常方便,這裡推薦給大家。

例如刷 leetcode 時,測試使用也非常的方便!

安裝

使用時我們需要先安裝「doctest」這個套件。
不過通常應該是都已經內建了。

我們可以用 import doctest 來測試看看有沒有 error。

import doctest

基本使用

我們先來看一個簡單的例子,
假設我們想要測試「我們製作的加法」的功能是否正常。

程式碼範例如下:

import doctest

def my_add(a, b):
    '''
    >>> my_add(1, 2)
    3
    '''
    return a+b


if __name__ == "__main__":    
    doctest.testmod()
  • 我們可以注意到有註解的部份,就是我們要測試的內容。
# 我們測試當 my_add 這個函數放入 (1, 2) 會發生什麼事,「>>>」可以視為 input 的概念
>>> my_add(1, 2) 
# 理論上,這個 function 應該要回傳 3 給我
3 

再提醒一次,我們需要用「”’ (3個單引號) 或 “”” (3個雙引號)」都可以,
在測試範圍前後各一個,來把這一段測試用的程式碼註解掉 (正常執行不會跑)。

  • 執行時,我們可以分成「一般正常執行」與「測試執行」

2023/8/10,感謝網友 Yuki 的提醒!
原本我學習到的內容有誤,以下內容已經校正完成

一般測試,只顯示錯誤

python test.py

只有出現錯誤時才會跳出訊息。

顯示所有測試,不論對錯

python test.py -v

v 這裡指的是 verbose,可以簡單理解為不論對錯都顯示。

結果

一般執行,只顯示報錯

我們可以看到,正常執行 (沒有下 -v ) 的時候
程式沒有反應,「因為全部內容都是正確的

正確情況!不論結果對錯,一律顯示 (加 -v)

在測試執行 (有下 -v ) 的時候,跑出了一些內容,
doctest 幫我們測試了 「my_add(1, 2)」 的這個 function,
我們「設定」他應該要回傳給我們 「3」。
而實際上也真的回傳給我們 「3」。

所以回傳 ok!

錯誤情況!不論結果對錯,一律顯示 (加 -v)

這邊示範一個錯誤情況,可以看以下範例:
我設定我們的函數應該要回傳給我們 「1」。

import doctest

def my_add(a, b):
    '''
    >>> my_add(1, 2)
    1
    '''
    return a+b


if __name__ == "__main__":    
    doctest.testmod()
  • 結果

看到真的出現錯誤了!

Expected: (我們期待的結果)
1

Got: (實際上得到的結果)
3

當然就 failure 啦!

補充:適用於 leetcode 的 doctest in class,doctest 搭配 class 的用法

可以參考我的另外一篇文章,裡面有詳細介紹 doctest 在 class 中的用法,
學起來在 leetcode 撰寫 testcase 非常的實用!

【Leetcode】python – 利用 doctest 測試 leetcode python testcase 的優雅寫法 (doctest in class,搭配 class 的用法)