chapter11 测试代码

在这里插入图片描述

  • Python在unittest,TestCase类中提供了很多断言方法
    在这里插入图片描述

  • 断言方法检查你认为应该满足的条件是否确实满足

课本例子

测试函数(针对单个的函数测试)

name_function.py
=====================================================================
def get_formatted_name(first,last):"""Generate a neatly formatted full name."""full_name = first + ' '+lastreturn 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':breaklast = input("Please give me a last name: ")if last == 'q':breakfromatted_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: joplinNeatly 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.000sOK

不可通过的测试

name_function.py
=====================================================================
def get_formatted_name(first,last):"""Generate a neatly formatted full name."""# full_name = first + ' '+lastfull_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_nameformated_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_namefull_name = first+ ' '+middle+' '+'last'
NameError: name 'middle' is not defined----------------------------------------------------------------------
Ran 1 test in 0.001sFAILED (errors=1)#运行失败,有一个错误

测试未通过时怎么办

nam_function.py
=============================================================================
def get_formatted_name(first,last,middle=' ' ):#生成整洁的姓名if middle:full_name = first+' '+middle+' '+lastelse:full_name = first+''+lastreturn full_name.title()运行test_name_function.py结果如下:
=============================================================================
.
----------------------------------------------------------------------
Ran 1 test in 0.000sOK

添加新测试

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.000sOK

测试类


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部