Тестирование кода в Python Try / Except Block - PullRequest
0 голосов
/ 13 февраля 2020
try:
    context.do_something()
except ValueError:
   return False

Я проверяю этот конкретный код. Когда я использую побочные усилия, например

context = mock.MagicMoc()
context.do_something.side_effect = ValueError

Когда я использую pytest.raises, тест проходит, но код не тестируется. Я пытался использовать assert, но это не удается

Любые предложения

1 Ответ

0 голосов
/ 13 февраля 2020

Я предполагаю, что вы оборачиваете код try / кроме функции, которую вы хотите протестировать. Вот два варианта для проверки этого:

1) Используйте менеджер контекста , чтобы проверить, что вызвано исключение, после изменения вашей функции, чтобы повторно вызвать ValueError (хотя, если вы не собираясь ничего с этим делать, вы могли бы просто не поймать это в первую очередь):

from unittest import TestCase, mock

def do_something(c):
    try:
        c.do_something()
    except ValueError as e:
        raise e

class TestSomething(TestCase):
    def test_do_something(self):
        context = mock.MagicMock()

        context.do_something.side_effect = ValueError

        with self.assertRaises(ValueError):
            do_something(context)

2) Вернуть True в успешном пути управления вашей функцией, а затем просто проверить это условие в ваш тест:

from unittest import TestCase, mock

def do_something(c):
    try:
        c.do_something()
        return True
    except ValueError as e:
        return False

class TestSomething(TestCase):
    def test_do_something(self):
        context = mock.MagicMock()

        context.do_something.side_effect = ValueError

        self.assertTrue(do_something(context))
...