chapter11 测试代码

在这里插入图片描述

  • 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

测试类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w要变强

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值