在python中使用單元測(cè)試unittest方式
為什么單元測(cè)試如此重要?
在我們開始冒險(xiǎn)之前,先來(lái)思考一下為什么單元測(cè)試如此重要。
嗯,首先,它們讓我們的代碼更可靠,保證了我們的函數(shù)和方法按照預(yù)期運(yùn)行。而且,單元測(cè)試還是代碼質(zhì)量的守護(hù)者,一旦引入新的功能或者修復(fù)一個(gè)Bug,只需運(yùn)行測(cè)試,就能夠確保不會(huì)對(duì)現(xiàn)有的功能產(chǎn)生負(fù)面影響。
第一步:準(zhǔn)備好你的工具
在我們的冒險(xiǎn)開始之前,確保你已經(jīng)準(zhǔn)備好了最重要的武器:Python和unittest模塊。
當(dāng)然,你也可以選擇其他測(cè)試框架,但unittest是Python內(nèi)建的,簡(jiǎn)單而有效。
# unitest_example1.py
import unittest
class MyTestCase(unittest.TestCase):
def test_hello_world(self):
result = "Hello, World!"
self.assertEqual(result, "Hello, World!")
第二步:讓測(cè)試跑起來(lái)!
現(xiàn)在,讓我們看看這個(gè)測(cè)試是如何運(yùn)作的。
簡(jiǎn)單的測(cè)試函數(shù),通過(guò) assertEqual 斷言我們的結(jié)果是否和期望一致。運(yùn)行測(cè)試:
python -m unittest unittest_example1.py
第三步:享受成功的喜悅
你聽到了嗎?那是代碼在默默地說(shuō):“我沒(méi)有Bug!” 這種感覺(jué),就像是踏入夏日冰淇淋店的涼意,清新又令人愉悅。
第四步:擴(kuò)展你的冒險(xiǎn)
單元測(cè)試的美妙之處在于,一旦你開始,你就會(huì)迷上它。不斷擴(kuò)展你的測(cè)試套件,覆蓋更多的代碼路徑。嘗試參數(shù)化測(cè)試,用更少的代碼覆蓋更多的場(chǎng)景。
注意:parameterized.expand 并不是 unittest 模塊中的一部分,它實(shí)際上來(lái)自于 parameterized 模塊,該模塊并不是 Python 標(biāo)準(zhǔn)庫(kù)的一部分。
為了使用 parameterized.expand,您需要安裝 parameterized 模塊。
pip install parameterized
#!/usr/bin/env python
# coding=utf-8
# @Time : 2024/1/31 15:40
# unittest_examples2.py
import unittest
from parameterized import parameterized
def add_numbers(a, b):
return a + b
class AdvancedTestCase(unittest.TestCase):
@parameterized.expand([
("case1", 1, 2, 3),
("case2", -1, 2, 1),
("case3", 0, 0, 0),
("case4", 0, 0, 2),
])
def test_addition(self, name, a, b, expected):
result = add_numbers(a, b)
self.assertEqual(result, expected)
if __name__ == '__main__':
unittest.main()
# python -m unittest unittest_examples2.py
# python3 -m unittest unittest_examples2.py我特意加了一個(gè)錯(cuò)誤的case4,運(yùn)行代碼:
python3 -m unittest unitest_example2.py

結(jié)語(yǔ):?jiǎn)卧獪y(cè)試是一場(chǎng)愉快的冒險(xiǎn)!
在我們的技術(shù)冒險(xiǎn)中,我們發(fā)現(xiàn)了單元測(cè)試的美妙之處。它不僅保護(hù)了我們的代碼,還讓我們充滿信心地迎接新的挑戰(zhàn)。
附錄
完整代碼:
#!/usr/bin/env python
# unitest_example1.py
import unittest
class MyTestCase(unittest.TestCase):
def setUp(self):
# 在測(cè)試前的準(zhǔn)備工作
self.data = [1, 2, 3]
def test_something(self):
# 測(cè)試代碼
result = 1 + 1
# 使用 assert 斷言檢查結(jié)果是否等于 2
self.assertEqual(result, 2)
# 使用 assert 斷言檢查列表中是否包含特定元素
self.assertIn(2, self.data)
# 使用 assert 斷言檢查條件是否為真
self.assertTrue(result == 2)
# 使用 assert 斷言檢查條件是否為假
self.assertFalse(result != 2)
# 使用 assert 斷言檢查兩個(gè)值是否不相等
self.assertNotEqual(result, 3)
# 使用 assert 斷言檢查某個(gè)值是否為 None
self.assertIsNone(None)
# 使用 assert 斷言檢查某個(gè)值是否不為 None
self.assertIsNotNone(result)
# 使用 assert 斷言檢查字符串是否以特定前綴開頭
self.assertTrue("hello".startswith("he"))
def tearDown(self):
# 在測(cè)試后的清理工作
del self.data
def run():
loader = unittest.TestLoader()
suite = loader.loadTestsFromTestCase(MyTestCase)
if __name__ == "__main__":
unittest.main()
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
用sleep間隔進(jìn)行python反爬蟲的實(shí)例講解
在本篇文章里小編給大家整理了一篇關(guān)于用sleep間隔進(jìn)行python反爬蟲的實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-11-11
Python中實(shí)現(xiàn)定時(shí)任務(wù)常見的幾種方式
在Python中,實(shí)現(xiàn)定時(shí)任務(wù)是一個(gè)常見的需求,無(wú)論是在自動(dòng)化腳本、數(shù)據(jù)處理、系統(tǒng)監(jiān)控還是其他許多應(yīng)用場(chǎng)景中,Python提供了多種方法來(lái)實(shí)現(xiàn)定時(shí)任務(wù),包括使用標(biāo)準(zhǔn)庫(kù)、第三方庫(kù)以及系統(tǒng)級(jí)別的工具,本文將詳細(xì)介紹幾種常見的Python定時(shí)任務(wù)實(shí)現(xiàn)方式2024-08-08
解決使用export_graphviz可視化樹報(bào)錯(cuò)的問(wèn)題
今天小編就為大家分享一篇解決使用export_graphviz可視化樹報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
python中關(guān)于py文件之間相互import的問(wèn)題及解決方法
這篇文章主要介紹了python中關(guān)于py文件之間相互import的問(wèn)題,本文用一個(gè)例子演示下如何解決python中循環(huán)引用的問(wèn)題,需要的朋友可以參考下2022-02-02
Python實(shí)現(xiàn)DBSCAN聚類算法并樣例測(cè)試
聚類是一種機(jī)器學(xué)習(xí)技術(shù),它涉及到數(shù)據(jù)點(diǎn)的分組,聚類是一種無(wú)監(jiān)督學(xué)習(xí)的方法,是許多領(lǐng)域中常用的統(tǒng)計(jì)數(shù)據(jù)分析技術(shù)。本文給大家分享Python實(shí)現(xiàn)DBSCAN聚類算法并樣例測(cè)試,感興趣的朋友一起看看吧2021-06-06
Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件
大家好,本篇文章主要講的是Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
Python3獲取拉勾網(wǎng)招聘信息的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Python3獲取拉勾網(wǎng)招聘信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
python實(shí)現(xiàn)對(duì)csv文件的列的內(nèi)容讀取
今天小編就為大家分享一篇python實(shí)現(xiàn)對(duì)csv文件的列的內(nèi)容讀取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Python 使用指定的網(wǎng)卡發(fā)送HTTP請(qǐng)求的實(shí)例
今天小編就為大家分享一篇Python 使用指定的網(wǎng)卡發(fā)送HTTP請(qǐng)求的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08

