16

KeyError不正なキーがディクショナリに渡されたときに が作成されることを確認する単体テストを作成しようとしています。

例外を発生させるコード:

connections = SettingsManager().get_connections()
try:
    connection = connections[self.conn_name]
except Exception:
    self.log.error("Connection %s does not exist, exiting." % conn_name)
    self.log.error(sys.exc_info()[0])
    raise

ラムダを使用したテストを探して見つけましたがKeyError、あまり運がありませんでした。ここに私がこれまでに行ったテストがありますが、実際のKeyError.

def test_bad_connection(self):
    #Testing to see if a non existant connection will fail gracefully.
    records = [1, 2]
    given_result = DataConnector("BadConnection").generate_data(self.table, records)
    expected_result = "BadConnection"

    self.assertRaises(KeyError, given_result[:1])
4

2 に答える 2

14

self.assertRaise()callable のみを受け取るので、その間

self.assertRaises(KeyError, given_result[:1])
KeyErrorテスト中 の実際の結果が得られます

self.assertRaises(KeyError, lambda: given_result[:1])
動作するはずです。

一般的に:
動作しません: self.assertRaises(KeyError, mydict[mykey]) #KeyError テストで
動作します : 動作しself.assertRaises(KeyError, lambda: mydict[mykey])
ます: self.assertRaises(KeyError, mydict.__getitem__, mykey) #しかし、関数の代わりに実際の辞書が必要です

于 2016-07-06T07:08:09.760 に答える