Assertraises:在进行方法的单位测试时,没有提出KeyError异常



我正在使用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关键字提高错误的情况并不相同。

相关内容

  • 没有找到相关文章

最新更新