iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

python的撞坑紀錄系列 第 3

python 測試也是個大坑

  • 分享至 

  • xImage
  •  

偶然找到一個名叫 unittest 的套件,也就是單元測試用的,畢竟總不能一個一個給程式做測試。

unittest是原本就裝在 python 裡面的,所以無須另外下載。

現在直接先看一個小程式。

import unittest

def PlusNumber(a, b):
        return a + b

# 測試類別,可以繼承並定義測試方法
class ForMyTest(unittest.TestCase):
    def test_ReturnMyName(self):
        name = "xia"
        self.assertEqual(list(name), ['x', 'i', 'a'])
        with self.assertRaises(TypeError):
            print("check")

    def test_number_add(self):
        answer = PlusNumber(1, 3)
        # 檢查返回值
        self.assertEqual(answer, 4)
        


if __name__ == '__main':
    unittest.main()

接著在底下輸入。

python -m unittest test.py

會出現以下
https://ithelp.ithome.com.tw/upload/images/20230914/20141325dqwPAKmPBR.png

這邊我沒有給他一個venv,沒有直接開一個虛擬環境,如果要開的話請輸入

python3 -m venv [資料夾]

windows:

[資料夾]\Scripts\activate

macOS/Linux:

source myenv/bin/activate

再來回到 assert這個單詞,這個字在pathon之中被譯為斷言,用來確認滿足是否符合表達式的條件,如無則直接觸發異常,不會執行到後面的程式碼。

上面的函式只是簡單地進行相加的步驟,所以應該可以很簡單的看出來沒有TypeError

如果需要顯示命令列

python -m unittest -h

更多的細節則使用

python -m unittest -v [檔名]

...
// test_number_add (test.ForMyTest) ... ok

在 unittest 的命名規範裡,test_ 開頭的測試會被自動運行。
如果要跳過測試呢?

@unittest.skip("demonstrating skipping")
    def test_ReturnMyName(self):
    # ...

結果會呈現以下
image1

還有跳過裝飾器的

@unittest.skip(reason)

裡頭的api還真的蠻多的,到目前的3.11來說坑已經不算少了,後面如果需要的話可以點擊這裡去做更多的查閱。


不過更多的,大家應該都是使用 pytest 或是 vscode 內建的方式,我個人是使用後者,畢竟對我來說比較方便一點。

這裡先提一下 pytest ,在網路上有看到官網的引導,那就隨意的撰寫一個小程式給他運行吧。

  • 安裝
pip install pytest

接下來就隨便寫個幾行進去

def test_passing():
    assert ['x', 'i', 'a'] == ['x', 'i', 'a']

運行

pytest test_module.py -v

結果
https://ithelp.ithome.com.tw/upload/images/20230914/20141325IPQHj37R8D.png
如果要跳過測試

@pytest.mark.skip(reason)

當然還有條件

@pytest.mark.skipif(reason)
# @pytest.mark.skipif(Module.__version__ < '0.1.0', reason = '不支援')

查閱資料


上一篇
Reflex (之前叫做 Pynecone )
下一篇
reflex text
系列文
python的撞坑紀錄33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言