Подтверждение Pytest из обратного вызова другой функции - PullRequest
0 голосов
/ 14 января 2020

Я использую pytest для проверки перехода состояния самолета. Я тестирую предопределенную функцию landing() и вызываю ее из другой функции. Это выглядит примерно так:

def landing():
    airplane_actions.decrease_altitude(ft=10000)
    time.sleep(30)
    airplane_actions.decrease_altitude(ft=5000)
    time.sleep(30)
    airplane_actions.decrease_altitude(ft=0)

В моем модуле тестирования, test_plane_actions.py, я вызываю эту функцию landing(), однако я хочу иметь возможность устанавливать значения высоты перед каждым сном.

test_plane_actions.py

def test_plane_actions():
    # Do some setups
    # assert
    plane_actions.landing() # I want to assert the altitudes in here from this function.

Есть ли способ вызвать функцию приземления () для обратного вызова модуля test_plane_actions.py в течение каждого периода ожидания и выполнить утверждение в течение каждого периода ожидания? Или, может быть, отложенное утверждение? Давайте предположим, что мы не можем разложить функцию landing(), и я хочу иметь возможность просто вызвать ее в test_plane_actions.py.

1 Ответ

1 голос
/ 15 января 2020

Одним из подходов было бы исправление функции sleep

. Вот небольшой пример использования unittest.mock

from unittest import mock

def test_plane_actions():
    expected_values = iter([10000, 5000])

    def sleep_but_actually_assert(s):
        assert plane_actions.ALTITUDE == next(expected_values)

    with mock.patch.object(time, 'sleep', sleep_but_actually_assert):
        plane_actions.landing()

, это также имеет приятную сторону -эффект, что ваш тест не займет более 60 секунд для запуска

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...