日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

测试如何学python_学习Python:如何测试函数和类,快学,与

發(fā)布時間:2025/3/15 python 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 测试如何学python_学习Python:如何测试函数和类,快学,与 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

編寫代碼離不開寫測試,只有通過測試才知道代碼的邏輯有沒有問題,健壯性好不好等,測試讓你深信,即便有越來越多的人使用你的程序,它也能一如既往正確地工作。

1.測試函數(shù)

Python標(biāo)準(zhǔn)庫中的模塊unittest提供了代碼測試工具。要進行相關(guān)測試,必須要有待測試的函數(shù),創(chuàng)建文件name_function.py,其內(nèi)容如下:

def get_formatted_name(first,last,middle = ''):

"""生成整潔的姓名"""

if middle:

full_name = f"{first} {middle} {last}"

else:

full_name = f"{first} {last}"

return full_name.title()

1.1單元測試和測試用例

1)單元測試

用于核實某個函數(shù)的某個方面沒有問題。

2)測試用例

是一組單元測試,它們一起核實函數(shù)在各種情況下的行為都符合要求。

3)全覆蓋測試

測試用例包含一整套單元測試,涵蓋了各種可能函數(shù)使用的方式。

1.2可通過的測試

import unittest

from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):

"""Test the name_function.py"""

def test_first_last_name(self):

"""能夠正確處理姓名嗎?"""

formatted_name = get_formatted_name('sun','wukong')

self.assertEqual(formatted_name,'Sun Wukong')

if __name__ == '__main__':

unittest.main()

運行上面測試用例,運行結(jié)果:

.

----------------------------------------------------------------------

Ran 1 test in 0.000s

OK

1.3未通過的測試

為通過測試很簡單,將待測試的函數(shù)稍微修改下:

def get_formatted_name(first,last,middle = ''):

"""生成整潔的姓名"""

full_name = f"{first} {middle} {last}"

return full_name.title()

運行1.2中的測試用例,則會輸出為通過的測試返回。筆者不再嘗試。

1.4添加新測試

import unittest

from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):

"""Test the name_function.py"""

def test_first_last_name(self):

"""能夠正確處理姓名嗎?"""

formatted_name = get_formatted_name('sun','wukong')

self.assertEqual(formatted_name,'Sun Wukong')

def test_first_last_middle_name(self):

"""測試三個名字"""

formatted_name = get_formatted_name('sun','wu','kong')

self.assertEqual(formatted_name,'Sun Kong Wu')

if __name__ == '__main__':

unittest.main()

運行結(jié)果:

..

----------------------------------------------------------------------

Ran 2 tests in 0.000s

OK

2.測試類

2.1各種斷言方法

Python在unittest.TestCase類中提供了很多斷言方法。下面列舉幾個常用的斷言方法。

方法

用途

assertEqual(a,b)

核實a == b

assertNotEqual(a,b)

核實a != b

assertTrue(x)

核實x為True

assertFalse(x)

核實x為False

assertIn(item,list)

核實item在list中

assertNotIn(item,list)

核實item不在list中

2.2一個要測試的類

類的測試與函數(shù)的測試相似,類的測試基本上都是對方法的測試,不過也存在一些不同之處,下面創(chuàng)建一個匿名調(diào)查類來進行測試。

class AnonymousServey:

"""收集匿名調(diào)查問卷的答案"""

def __init__(self,question):

"""存儲一個問題,并為存儲答案做好準(zhǔn)備"""

self.question = question

self.responses = []

def show_question(self):

"""顯示調(diào)查問卷"""

print(self.question)

def store_response(self,new_response):

"""存儲單份問卷調(diào)查"""

self.responses.append(new_response)

def show_result(self):

"""顯示收集到的所有答案"""

print("Survey results:")

for response in self.responses:

print(f"- {response}")

下面編寫一個測試,對

AnonymousServey

類的行為一個方面進行驗證:核實答案列表中是否有指定答案。

import unittest

from survey import AnonymousServey

class TestAnonymousServey(unittest.TestCase):

"""針對AnonymousServey進行測試"""

def test_store_single_response(self):

question = "What language did you first learn to speak?"

self.my_survey = AnonymousServey(question)

self.my_survey.store_response('python')

self.assertIn('python',self.my_survey.responses)

if __name__ == '__main__':

unittest.main()

上面的測試類先導(dǎo)入

unittest

和要測試的

AnonymousServey

,測試調(diào)查問卷的被存儲后,測試指定數(shù)據(jù)是否包含在存儲的列表中。我們還可以添加更多維度的測試case,例如測試指定某列表是否包含在存儲的列表中。

2.3方法setUp()

如果繼續(xù)添加測試方法,會有很多重復(fù),如何讓公共的變量或者測試數(shù)據(jù),在用例執(zhí)行前就能聲明好,而且其他方法都可以公用,如何解決呢?可以使用

setUp()

函數(shù)。結(jié)合上面的測試用例,看看如何使用

setUp()

函數(shù)

import unittest

from survey import AnonymousServey

class TestAnonymousServey(unittest.TestCase):

"""針對AnonymousServey進行測試"""

def setUp(self):

"""創(chuàng)建一個調(diào)查對象和一組答案,供測試方法使用"""

question = "What language did you first learn to speak?"

self.my_survey = AnonymousServey(question)

self.tree_responses = ['java','php','python']

def test_store_single_response(self):

self.my_survey.store_response(self.tree_responses[0])

self.assertIn(self.tree_responses[0],self.my_survey.responses)

def test_store_tree_response(self):

for response in self.tree_responses:

self.my_survey.store_response(response)

for response in self.tree_responses:

self.assertIn(response,self.my_survey.responses)

if __name__ == '__main__':

unittest.main()

方法

setUp()

做了兩件事:創(chuàng)建一個調(diào)查對象,以及創(chuàng)建一個答案列表。存儲這兩樣?xùn)|西的變量名包含前綴

self

(即存儲在屬性中),因此可以類的任何地方進行使用。

注意

:單元測試對于一個程序的健壯形特別重要。但是要想要自己的單元測試覆蓋自己所寫的每個方法,每一行卻不是很容易,需要各種條件的設(shè)置,對于第三方的調(diào)用還可以使用Mock方式進行,此是后話了。

總結(jié)

以上是生活随笔為你收集整理的测试如何学python_学习Python:如何测试函数和类,快学,与的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。