我是靠谱客的博主 彪壮电话,最近开发中收集的这篇文章主要介绍Python中单元测试出错了,会怎么样?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在上一篇中,我们看到了单元测试正常通过时的情况,如果我们边修改一下要测试的函数,然后再运行单元测试,会出现什么情况。

原say_hello_name.py

1 def hello_name(name):
2     greet = "Hello , "
3     return greet + name.title()

修改后say_hello_name.py

1 def hello_name(first_name,last_name):
2     greet = "Hello , "
3     return greet + first_name.title() + ' ' + last_name.title() 

修改后的问候语句,不止包含名字,还包含姓,然后我们运行测试类HelloTest,看下效果:

test_say_hello.py

#coding=gbk
import unittest

from say_hello_function import hello_name

class HelloTest(unittest.TestCase):
    """用于测试say_hello_function.py"""
    def test_hello_name(self):
        """是否能正确处理Joker 这个名字"""
        hello_str = hello_name('Joker')
        self.assertEqual(hello_str,'Hello , Joker')
        
unittest.main()
    

运行后如下:

解释:我们发现控制台报错了,且包含很多信息,因为测试 未通过时,Python得让你尽可能多的知道为什么错,第一行字母E,表示测试用例中有一个单元测试导致错误。

第二行   ERROR: test_hello_name (__main__.HelloTest)   可以看出是HelloTest 中的test_hello_name 方法导致了错误。而在图中Traceback 更明确的指出了错误的位置,hello_name()缺少了一个必须的位置实参 来对应形参 last_name。倒数第2行,表示运行了一个单元测试。最后还看到了一条消息FAILED它表示整个测试用例都未通过,因为在运行测试用例的时候发生了一个错误。

这样我们就很清楚的知道了错误的位置,我们既然知道错误的位置接下来如何去做?

优化函数hello_name():让这个函数技能接收两个实参,也能接收一个实参,这样就不会出错了,具体修改如下:

最终版say_hello_name.py

1 def hello_name(first_name,last_name=""):
2     greet = "Hello , "
3     if last_name:
4         return greet + first_name.title() + ' ' + last_name.title() 
5     else :
6         return greet + first_name.title()

在这个最终版中,姓是可选的,不管是只有名字还是包含姓和名字都能进行处理,我们添加一个新测试来测试包含姓和名字的新功能,修改测试类如下:

test_say_hello.py

#coding=gbk
import unittest

from say_hello_function import hello_name

class HelloTest(unittest.TestCase):
    """用于测试say_hello_function.py"""
    def test_hello_name(self):
        """是否能正确处理Joker 这个名字"""
        hello_str = hello_name('Joker')
        self.assertEqual(hello_str,'Hello , Joker')
        
    def test_hello_first_last(self):
        """能否正确处理Joker Pan这个姓名"""
        hello_str1 = hello_name('joker','pan')
        self.assertEqual(hello_str1,'Hello , Joker Pan')
        
unittest.main()

运行后控制台打印如下:

额,运气真好,测试用例都通过了,所以在最终版中,函数hello_name()既可以处理Joker 这样的名字也可以处理Joker Pan 这样的姓名,而且我们无需手动去测试此函数。在此函数中添加新功能时,我们就很容易修复完善此函数,因为只要未通过的测试,我们就知道新代码破坏了函数原来的行为。

 

上unittest中常用的断言方法(如果想用这些方法,前提是你导入了unittest模块)

方法作用
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中

 

最后

以上就是彪壮电话为你收集整理的Python中单元测试出错了,会怎么样?的全部内容,希望文章能够帮你解决Python中单元测试出错了,会怎么样?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部