python对函数进行单元测试_单元测试 - 如何测试Python函数是否会引发异常?

本文介绍了在Python单元测试中如何正确使用`assertRaises`来测试预期的异常。通过一个具体的例子展示了当函数`square_value`期望输入为字符串但接收到一个整数时,会抛出`TypeError`。原始测试代码直接调用函数导致异常被触发,而正确的做法是使用`lambda`表达式来确保异常检查。修正后的测试用例成功捕获了预期的异常,使得测试通过。
摘要由CSDN通过智能技术生成

来自:[http://www.lengrand.fr/2011/12/pythonunittest-assertraises-raises-error/]

首先,这是文件dum_function.py中相应的(仍为dum:p)函数:

def square_value(a):

"""

Returns the square value of a.

"""

try:

out = a*a

except TypeError:

raise TypeError("Input should be a string:")

return out

这是要执行的测试(仅插入此测试):

import dum_function as df # import function module

import unittest

class Test(unittest.TestCase):

"""

The class inherits from unittest

"""

def setUp(self):

"""

This method is called before each test

"""

self.false_int = "A"

def tearDown(self):

"""

This method is called after each test

"""

pass

#---

## TESTS

def test_square_value(self):

# assertRaises(excClass, callableObj) prototype

self.assertRaises(TypeError, df.square_value(self.false_int))

if __name__ == "__main__":

unittest.main()

我们现在准备测试我们的功能了! 以下是尝试运行测试时发生的情况:

======================================================================

ERROR: test_square_value (__main__.Test)

----------------------------------------------------------------------

Traceback (most recent call last):

File "test_dum_function.py", line 22, in test_square_value

self.assertRaises(TypeError, df.square_value(self.false_int))

File "/home/jlengrand/Desktop/function.py", line 8, in square_value

raise TypeError("Input should be a string:")

TypeError: Input should be a string:

----------------------------------------------------------------------

Ran 1 test in 0.000s

FAILED (errors=1)

实际引发TypeError,并生成测试失败。 问题是这正是我们想要的行为:s。

要避免此错误,只需在测试调用中使用lambda运行该函数:

self.assertRaises(TypeError, lambda: df.square_value(self.false_int))

最终输出:

----------------------------------------------------------------------

Ran 1 test in 0.000s

OK

完美!

......对我来说也是完美的!!

非常感谢Julien Legrand-Lambert先生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值