2017-04-20 20 views
0

は、例外が発生したとしても、それはassertRaisesここ assertRaises:私はassertRaisesを使用して例外をテストしてい

によって検出されていないメソッドのユニットテストをしながらKeyError例外例外が発生しませんが、テスト中のメソッドです。

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 

ユニットテストケースで何が問題になっていますか?

答えて

0

適切な文脈とコードを明記していただきありがとうございます。ここで問題です:

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キーワードでエラーを発生させることと同じではありません。

+0

例外が発生したことを意味するexceptブロック内にあるとは限りません。 –

+0

いいえ、 'except'ブロックは、例外が "捕捉"されたことを意味するが、発生しなかった場合に使用されます。あなたはそれを持ち上げたり、扱うことができます。 assertRaises()は特にその昇格動作をチェックしています。 – JacobIRR

+0

オハイオ州オハイオ州オクラホマ、何かを優雅に例外を処理し、何かを上げたくないようなケーステストのための最善の方法は、単にログと移動することがありますか? –

関連する問題