Утверждение в python коде и модульном тестировании, которое проверяет, есть ли утверждение assert? - PullRequest
0 голосов
/ 29 января 2020

У меня есть код с оператором assert. Кроме того, я выполняю модульное тестирование этого кода и хочу дать условие, и если в коде есть оператор assert, тест пройдет успешно.

def do_something(m, n):
   assert m !=0, "m has to be greater then 1"
       .....

В модульном тестировании я хочу to:

class Test_ (unittest.TestCase):
    def test_something(self):
        # if m=0
        self.assert?????(m=0, ??not sure??)

Что написать, чтобы проверить, есть ли оператор assert для m=0? Я видел что-то о контекстном менеджере? Это связано?

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Я в основном согласен с @DeepSpace, но если вы хотите продолжать использовать assert, вы можете проверить, что ваша функция повышает AssertionError в ожидаемых вами условиях.

def do_something(m, n):
    assert m != 0, "m has to be greater than 1"


class TestDoSomething(unittest.TestCase):
    def test_raises_for_zero(self):
        with self.assertRaises(AssertionError):
            do_something(0, 'whatever')

    def test_raises_for_negative(self):
        with self.assertRaises(AssertionError):
            do_something(-1, 'whatever')

И, чтобы расширить на ваш вопрос о контекстных менеджерах. В наших примерах мы используем менеджер контекста, когда мы вызываем self.assertRaises в операторах with. Менеджеры контекста полезны, когда мы временно хотим изменить то, как что-то работает или выглядит, в этом примере менеджер контекста помогает нам перехватить исключение и убедиться, что оно вызывается при вызове do_something с определенными аргументами.

0 голосов
/ 29 января 2020

Поскольку у вас уже есть юнит-тест, я удалил бы assert из протестированной функции и вместо этого вызвал бы исключение.

Затем вы можете проверить это в вашем юнит-тесте с помощью assertRaises.

def do_something(m, n):
   if m <= 1:
       raise ValueError('m has to be greater than 1')

class Test_(unittest.TestCase):
    def test_something(self):
        with self.assertRaises(ValueError):
            do_something(0, 'whatever')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...