assertRaises:对方法进行单元测试时未引发 KeyError 异常
assertRaises: KeyError exception is not raised while doing unit test of a method
我正在使用 assertRaises 测试异常,即使引发了异常,assertRaises 也没有检测到它
下面是测试方法:
def process_data(data):
"""
process output data
:return: dict object
"""
component = dict()
try:
properties = dict()
properties['state'] = data['state']
properties['status'] = data['status']
component['properties'] = properties
except KeyError as e:
print "Missing key '{0}' in the response data".format(str(e))
return component
sample_data = {}
process_data(sample_data)
测试代码为:
import unittest
import test_exception
class TestExceptions(unittest.TestCase):
"""
test class
"""
def test_process_data(self):
"""
test
:return:
"""
sample = {}
self.assertRaises(KeyError, test_exception.process_data, sample)
if __name__ == '__main__':
unittest.main()
但它没有按预期工作,出现以下错误:
unittest -p test_test_exception.py
Missing key ''state'' in the response data
Missing key ''state'' in the response data
Failure
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 331, in run
testMethod()
File "/unittest/test_test_exception.py", line 16, in test_process_data
self.assertRaises(KeyError, test_exception.process_data, sample)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 475, in assertRaises
callableObj(*args, **kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 116, in __exit__
"{0} not raised".format(exc_name))
AssertionError: KeyError not raised
Ran 1 test in 0.001s
FAILED (failures=1)
Process finished with exit code 1
单元测试用例有什么问题?
感谢您发布具有正确上下文和代码的清晰问题。问题是:
except KeyError as e:
print "Missing key '{0}' in the response data".format(str(e))
这应该是:
except KeyError as e:
print "Missing key '{0}' in the response data".format(str(e))
raise
您的单元测试正在检查是否已引发异常(代码已完全短路)。查找异常类型并打印消息与使用 raise
关键字引发错误不同。
我正在使用 assertRaises 测试异常,即使引发了异常,assertRaises 也没有检测到它
下面是测试方法:
def process_data(data):
"""
process output data
:return: dict object
"""
component = dict()
try:
properties = dict()
properties['state'] = data['state']
properties['status'] = data['status']
component['properties'] = properties
except KeyError as e:
print "Missing key '{0}' in the response data".format(str(e))
return component
sample_data = {}
process_data(sample_data)
测试代码为:
import unittest
import test_exception
class TestExceptions(unittest.TestCase):
"""
test class
"""
def test_process_data(self):
"""
test
:return:
"""
sample = {}
self.assertRaises(KeyError, test_exception.process_data, sample)
if __name__ == '__main__':
unittest.main()
但它没有按预期工作,出现以下错误:
unittest -p test_test_exception.py
Missing key ''state'' in the response data
Missing key ''state'' in the response data
Failure
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 331, in run
testMethod()
File "/unittest/test_test_exception.py", line 16, in test_process_data
self.assertRaises(KeyError, test_exception.process_data, sample)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 475, in assertRaises
callableObj(*args, **kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 116, in __exit__
"{0} not raised".format(exc_name))
AssertionError: KeyError not raised
Ran 1 test in 0.001s
FAILED (failures=1)
Process finished with exit code 1
单元测试用例有什么问题?
感谢您发布具有正确上下文和代码的清晰问题。问题是:
except KeyError as e:
print "Missing key '{0}' in the response data".format(str(e))
这应该是:
except KeyError as e:
print "Missing key '{0}' in the response data".format(str(e))
raise
您的单元测试正在检查是否已引发异常(代码已完全短路)。查找异常类型并打印消息与使用 raise
关键字引发错误不同。