pythonで単体テストで、例外時の処理を行いたい場合は以下の方法がある。
メソッドで任意例外を呼び出す場合
以下の例は、codecs.open が呼び出されると、Exception(“test”)が投げられる
1 2 3 |
with patch('codecs.open', side_effect=Exception("test")) |
オブジェクトのメソッドが呼ばれたときに任意の例外を出す場合
以下の例は、MySQLdb.cursors.DictCursor のexecuteメソッドが呼ばれたときに任意の例外が呼ばれるようにする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
with patch('MySQLdb.cursors.DictCursor') as mockOut: # execute と入れ替えるメソッド def exception_execute(sql, query) : # 処理したい内容 今回は例外を投げる raise Exception("test") # MySQLdb.cursors.DictCursor のオブジェクトを生成する m = mockOut() # MySQLdb.cursors.DictCursor のオブジェクトの execute メソッドをexception_executeに置き換える # 実際に呼び出すときの引数と合わないと、例外が発生するので注意 m.execute = exception_execute |