Как может макет библиотеки Pythons проверить функцию, вызванную с ограниченными случайными аргументами? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть функция, которая пишет в поддельный поток кинезиса и завершается ошибкой при четвертом вызове.Вызванный со значением является преднамеренно ограниченной случайной величиной, и поэтому мы хотим утверждать, что полученное значение находится в границах.

@patch('time.sleep', return_value=None)
def test_backoff_called_with_on_failure(patched_sleep):
    with batch_writer.KinesisStreamBatchWriter(
             "bad",
             "ok", 
             dead_letters=_one_dead_letter) as batch:
        batch._put_records = _fake_put_records_fail_half
        for i in range(0, 4):
            batch.queue_record({'i': i})

# Add Assert 

Я хочу проверить, что time.sleep вызывается со случайным числом, большим, чемпол, но меньше потолка.

Как я могу утверждать это условие, поскольку mock.called_with ожидает одно детерминированное значение?

1 Ответ

0 голосов
/ 19 сентября 2019

Мне пришлось использовать атрибут mock.call_args_list, чтобы получить исходные аргументы, а затем выполнить сравнение между примитивами

@patch('time.sleep', return_value=None)
def test_backoff_called_on_failure(patched_sleep):
    with batch_writer.KinesisStreamBatchWriter("bad", "ok", dead_letters=_one_dead_letter) as batch:
        batch._put_records = _fake_put_records_fail_half
        for i in range(0, 4):
            batch.queue_record({'i': i})

    # Begin direct comparison code
    assert len(patched_sleep.call_args_list) > 1
    for index, arguments in enumerate(patched_sleep.call_args_list):
        actual_call_value = arguments[0][0] # Unpack the tuple structure
        assert actual_call_value >= math.pow(
            batch_writer.INITIAL_BACKOFF_TIME,
            index)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...