не может издеваться над исключением с pytest - PullRequest
0 голосов
/ 07 октября 2019

Я не могу проверить исключение 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 Ответ

0 голосов
/ 07 октября 2019

Используйте with pytest.raises для тестирования исключений:

def main_test():
  with pytest.raises(getopt.GetoptError)  as err:
     main.main()

См. Утверждение Pytest для http://doc.pytest.org/en/latest/assert.html

...