簡體   English   中英

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關鍵字引發錯誤不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM