не может издеваться над исключением с помощью pytest
Кажется, я не могу проверить исключение getopt. Вот очень упрощенный пример (основной файл):
import sys, getopt
def main():
try:
options, _ = getopt.getopt(sys.argv[1:], 'h')
except getopt.GetoptError:
print("here I want to go")
if __name__ == '__main__':
main()
И тестовый файл, в котором я пытаюсь вызвать исключение GetoptError, находится здесь (тестовый файл):
import getopt, mock, main
@mock.patch("getopt.getopt", mock.MagicMock(side_effect=getopt.GetoptError('')))
def main_test():
try:
main.main()
assert False
except getopt.GetoptError:
assert True
К сожалению, никаких исключений не возникает. Тест возвращает:
@mock.patch("getopt.getopt", mock.MagicMock(side_effect=getopt.GetoptError('')))
def main_test():
try:
main.main()
> assert False
E assert False
main_test.py:7: AssertionError
Кто-нибудь может указать, что мне не хватает? Спасибо.
1 ответ
Использовать with pytest.raises
для тестирования исключений:
def main_test():
with pytest.raises(getopt.GetoptError) as err:
main.main()
Обратитесь к pytest assert для http://doc.pytest.org/en/latest/assert.html