🖼 人工智能学习总目录

🖼 《Python编程_从入门到实践》小结及目录

本章知识小结:

  • 1、单元测试(合适函数某方面没问题)、测试用例(一组单元测试)、全覆盖(一套单元测试,覆盖各种可能)
  • 2、unittest.TestCase,如果整个文件作为被测试框架导入测试,变量__name__的值不是__main__,故不会调用unittest.main()
  • 3、断言方法(assertEqual(a,b)、assertNotEqual(a,b)、assertTrue(x)、assertFalse(x)、assertIn(item,list)、assertNotIn(item,list))
  • 4、setUp()方法怎么写?(导入unittest和测试类Dog,定义TestDog(unittest.TestCase)类,定义setUp方法存储即将测试的信息,定义test函数测试)

1、测试函数

单元测试 用于核实函数的某个方面没有问题。

测试用例 是一组单元测试,它们一道核实函数在各种情形下的行为都符合要求

全覆盖 的测试用例包含一整套单元测试,涵盖了各种可能得函数使用方式

1
2
3
4
5
6
7
8
9
# 1、name_function.py
def get_formatted_name(first, last, middle=''):
"""生成整洁的姓名.
未通过测试怎么办?函数传参middle="",函数内判断middle是否存在,分开处理"""
if middle:
full_name = f"{first} {middle} {last}"
else:
full_name = f"{first} {last}"
return full_name.title()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 2、test_name_function.py
# 测试name_function.py
import unittest
from name_function import get_formatted_name


class NamesTestCase(unittest.TestCase):
def test_first_last_name(self):
#能够正确地处理像Janis Joplin这样的姓名吗?
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')

def test_first_last_middle_name(self):
#能正确地处理像Wolfgang Amadeus Mozart这样的姓名吗?
formatted_name = get_formatted_name('wolfgang', 'mozart', 'amadeus')
self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')

# 直接运行这个文件,会调用unittest.main()来测试用例
# 如果整个文件作为被测试框架导入测试,变量__name__的值不是__main__,因此不会调用unittest.main()
if __name__ == '__main__':
unittest.main()

2、测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# survey.py
# 收集匿名调查问卷
class AnonymousSurvey:

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("调查结果:")
for response in self.responses:
print(f"- {response}")

2.1 各种断言方法

1
2
3
4
5
6
7
8
import unitest.TestCase

assertEqual(a,b)
assertNotEqual(a,b)
assertTrue(x)
assertFalse(x)
assertIn(item,list)
assertNotIn(item,list)

2.2 测试类AnonymousSurvey

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# language_survey.py
from survey import AnonymousSurvey

# 定义一个问题,你最先使用的语言是什么
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)

# 现实问题,存储用户回答答案
my_survey.show_question()
print("Enter 'q' at any time to quit.\n")
while True:
response = input("Language: ")
if response == 'q':
break
my_survey.store_response(response)

# 显示用户回答的结果列表
print("\nThank you to everyone who participated in the survey!")
my_survey.show_results()

2.3 方法setUp()

setUp()创建一系列参数并设置其属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# test_survey.py
import unittest
from survey import AnonymousSurvey

# 测试AnonymousSurvey类
class TestAnonymousSurvey(unittest.TestCase):


def setUp(self):
# 创建一个问题,和回答列表
question = "What language did you first learn to speak?"
self.my_survey = AnonymousSurvey(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()