簡單易懂的中文語法書?python學習筆記-基礎語法1、可通過的測試,下面我們就來聊聊關于簡單易懂的中文語法書?接下來我們就一起去了解一下吧!

簡單易懂的中文語法書
python學習筆記-基礎語法
第十一章 代碼測試- 一、測試函數
- 二、測試類
1、可通過的測試
- 導入模塊unittest來提供代碼測試工具
- 創建一個繼承unittest.TestCase()的類,用于包含一系列針對函數的單元測試
- 使用unittest.main()來讓Python運行這個文件中的測試
方法 |
描述 |
單元測試 |
用于核實函數的某個方面沒有問題 |
全覆蓋式測試 |
用例包含一整套單元測試,涵蓋了何種可能的函數使用方式 |
self.assertEqual(A,B) |
一種斷言方法,将A的值與B相比較并反饋 |
def get_formatted_name(first,last):
full_name = first ' ' last
return full_name.title()
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
def test_first_last_name(self):
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
if __name__ == '__main__':
unittest.main()
輸出結果為:
Ran 1 test in 0.003s
OK
2、不能通過測試
def get_formatted_name(first,middle,last):
full_name = first " " middle ' ' last
return full_name.title()
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
def test_first_last_name(self):
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
if __name__ == '__main__':
unittest.main()
輸出結果為:
Ran 1 test in 0.005s
FAILED (errors=1)
Error
Traceback (most recent call last):
File "D:\Python_Work\Python學習\Python編程-從入門到實踐\測試name_function中的函數.py", line 5, in test_first_last_name
formatted_name = get_formatted_name('janis', 'joplin')
TypeError: get_formatted_name() missing 1 required positional argument: 'last'
3、測試未通過時的做法
- 檢查對函數的修改,找出導緻函數行為不符合預期的修改,不要修改測試
def get_formatted_name(first,last,middle=''):
if middle:
full_name = first " " middle ' ' last
else:
full_name = first ' ' last
return full_name.title()
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
def test_first_last_name(self):
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
if __name__ == '__main__':
unittest.main()
輸出結果為:
Ran 1 test in 0.002s
Launching unittests with arguments python -m unittest D:/Python_Work/Python學習/Python編程-從入門到實踐/測試name_function中的函數.py in D:\Python_Work\Python學習\Python編程-從入門到實踐
OK
4、添加新測試
- 在類中添加一個新方法即可
def get_formatted_name(first,last,middle=''):
if middle:
full_name = first " " middle ' ' last
else:
full_name = first ' ' last
return full_name.title()
import unittest
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase):
def test_first_last_name(self):
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
def test_first_middle_last_name(self):
formatted_name = get_formatted_name('wolfgang','mozart','amadeus')
self.assertEqual(formatted_name,'Wolfgang Amadeus Mozart')
if __name__ == '__main__':
unittest.main()
輸出結果為:
Ran 2 tests in 0.003s
OK
1、各種斷言方法
- 隻能在繼承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、一個要測試的類
class AnonySurvey():
def __init__(self,question):
self.question = question
self.responses = []
def show_question(self):
print(self.question)
def store_response(self,new_response):
self.responses.append(new_response)
def show_results(self):
print("Survey results:")
for response in self.responses:
print("- " response)
測試類:
import unittest
from language_survery import AnonySurvey
class TestAnonySurvey(unittest.TestCase):
def test_store_single_response(self):
question = input("What language did you first learn to speak?")
my_survey = AnonySurvey(question)
my_survey.store_response("English")
self.assertIn('English',my_survey.responses)
def test_store_three_responses(self):
question = input("What language did you first learn to speak?")
my_survey = AnonySurvey(question)
responses = ['English','Spanish','Mandarin']
for response in responses:
my_survey.store_response(response)
for response in responses:
self.assertIn(response,my_survey.responses)
unittest.main()
輸出結果為:
Ran 2 tests in 0.000s
OK
3、方法setUp()
- unittest.TestCase()類包含方法setUp(),Python将運行之,創建一次對象,再運行各個以test_打頭的方法
class AnonySurvey():
def __init__(self,question):
self.question = question
self.responses = []
def show_question(self):
print(self.question)
def store_response(self,new_response):
self.responses.append(new_response)
def show_results(self):
print("Survey results:")
for response in self.responses:
print("- " response)
import unittest
from language_survery import AnonySurvey
class TestAnonySurvey(unittest.TestCase):
def setUp(self):
question = "What language did you first learn to speak?"
self.my_survey = AnonySurvey(question)
self.responses = ['English','Spanish','Mandarin']
def test_store_single_response(self):
self.my_survey.store_response(self.responses[0])
self.assertIn(self.responses[0],self.my_survey.responses)
def test_store_three_responses(self):
for response in self.responses:
self.my_survey.store_response(response)
for response in self.responses:
self.assertIn(response,self.my_survey.responses)
if __name__ == '__main__':
unittest.main()
輸出結果為:
Ran 2 tests in 0.002s
OK
- 方法setUp()做了兩件事:創建一個調查對象,創建一個答案列表;存儲這兩樣東西的變量名包含前綴self(即存儲在屬性中),因此可在這個類的任何地方使用。
- 測試自己編寫的類時,方法setUp()讓測試方法編寫起來更容易:可在setUp()方法中創建一系列實例并設置它們的屬性,再在測試方法中直接使用這些事例。相比于在每個測試方法中都創建實例并設置其屬性要容易得多。