-
Python在unittest,TestCase类中提供了很多断言方法
-
断言方法检查你认为应该满足的条件是否确实满足
课本例子
测试函数(针对单个的函数测试)
name_function.py
=====================================================================
def get_formatted_name(first,last):
"""Generate a neatly formatted full name."""
full_name = first + ' '+last
return full_name.title()
name.py
=====================================================================
from name_function import get_formatted_name#从name_function.py中导入get_formatted_name()
print ("Enter 'q' at any time to quit.")
while True:
first = input("\nPlease give me a first name: ")
if first == 'q':
break
last = input("Please give me a last name: ")
if last == 'q':
break
fromatted_name = get_formatted_name(first,last)
print("\tNeatly formatted name: "+fromatted_name+".")
=====================================================================
Enter 'q' at any time to quit.
Please give me a first name: janis
Please give me a last name: joplin
Neatly formatted name: Janis Joplin.
Please give me a first name: q
进程已结束,退出代码 0
可通过的测试
test_name_function.py
=====================================================================
"""先导入模块unittest以及要测试的函数"""
"""再创建一个继承unittest.TestCase的类,并编写一系列方法对哈数行为的不同方面进行测试"""
import unittest#导入模块uinttest
from name_function import get_formatted_name#导入要测试的函数
class NameTestCase(unittest.TestCase):#创建NameTestCase类,用于对get_formatted_name()单元的测试
"""测试name_function.py"""
def test_first_last_name(self):#test_first_last_name()方法
"""能够正确地处理像Janis Joplin这样的姓名吗?"""
formated_name = get_formatted_name('janis','joplin')#使用两个实参janis,joplin调用get_forrmatted_name()函数,将结果存储到变量formatted_name中
"""断言方法,核实结果与期望是否一致"""
self.assertEqual(formated_name,'Janis Joplin')#调用unittest的方法assertEqual(),并向它传递两个参数
#将formated_name的值同字符串'Janis Joplin'比较
unittest.main()
=====================================================================
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
不可通过的测试
name_function.py
=====================================================================
def get_formatted_name(first,last):
"""Generate a neatly formatted full name."""
# full_name = first + ' '+last
full_name = first+ ' '+middle+' '+'last'
return full_name.title()
运行test_name_function.py结果如下:
=====================================================================
E#测试用例中有一个单元测试导致了错误
=============================================================================
ERROR: test_first_last_name (__main__.NameTestCase)# test_first_last_name 导致的错误
能够正确地处理像Janis Joplin这样的姓名吗?
----------------------------------------------------------------------
Traceback (most recent call last):
File "G:/code/book_1/chapter11/test_name_function.py", line 11, in test_first_last_name
formated_name = get_formatted_name('janis','joplin')#使用两个实参janis,joplin调用get_forrmatted_name()函数,将结果存储到变量formatted_name中
File "G:\code\book_1\chapter11\name_function.py", line 4, in get_formatted_name
full_name = first+ ' '+middle+' '+'last'
NameError: name 'middle' is not defined
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)#运行失败,有一个错误
测试未通过时怎么办
nam_function.py
=============================================================================
def get_formatted_name(first,last,middle=' ' ):
#生成整洁的姓名
if middle:
full_name = first+' '+middle+' '+last
else:
full_name = first+''+last
return full_name.title()
运行test_name_function.py结果如下:
=============================================================================
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
添加新测试
test_name_function.py
=============================================================================
"""先导入模块unittest以及要测试的函数"""
import self as self
"""再创建一个继承unittest.TestCase的类,并编写一系列方法对哈数行为的不同方面进行测试"""
import unittest#导入模块uinttest
from name_function import get_formatted_name#导入要测试的函数
class NameTestCase(unittest.TestCase):#创建NameTestCase类,用于对get_formatted_name()单元的测试
"""测试name_function.py"""
def test_first_last_name(self):#test_first_last_name()方法
"""能够正确地处理像Janis Joplin这样的姓名吗?"""
formated_name = get_formatted_name('janis','joplin')#使用两个实参janis,joplin调用get_forrmatted_name()函数,将结果存储到变量formatted_name中
"""断言方法,核实结果与期望是否一致"""
self.assertEqual(formated_name,'Janis Joplin')#调用unittest的方法assertEqual(),并向它传递两个参数
#将formated_name的值同字符串'Janis Joplin'比较
"""添加新测试"""
def test_first_last_middle_name(self):#方法名必须是test_打头,只有这样它在会在运行test_name_function.py时自动运行
"""能够正确地处理像Wolfang Amadeus Mozart这样的姓名吗?"""
formatted_name = get_formatted_name( 'wolfang','mozart','amadeus')
self.assertEqual(formatted_name,'Wolfang Amadeus Mozart')
unittest.main()#单元测试运行需要unittest.main(),作用是将一个单元测试模块变成可以直接运行的测试脚本
=============================================================================
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK