2016-09-22 3 views
2

Я не был уверен, как создать Python unittest, чтобы проверить, вернул ли словарь KeyError. Я думал, что тестовый модуль будет вызывать словарь ключ, он будет выглядеть следующим образом:Python Unit Test Dictionary Assert KeyError

def test_dict_keyerror_should_appear(self): 
    my_dict = {'hey': 'world'} 
    self.assertRaises(KeyError, my_dict['some_key']) 

Однако мой тест просто без ошибок с KeyError вместо того, утверждая, что KeyError произошло.

+0

Похоже контратип http://stackoverflow.com/questions/11371849/testing-exception-message-with-assertraise#11371899 –

ответ

1

Чтобы решить эту проблему, я использовал lambda, чтобы вызвать ключ словаря, чтобы поднять ошибку.

def test_dict_keyerror_should_appear(self): 
    my_dict = {'hey': 'world'} 
    self.assertRaises(KeyError, lambda: my_dict['some_key']) 
1

Другим вариантом было бы использовать operator.getitem:

from operator import getitem 

self.assertRaises(KeyError, getitem, my_dict, 'some_key')