是否可以检查是否使用参数列表

时间:2016-07-26 08:14:12

标签: python unit-testing mocking pytest python-unittest.mock

我们说我们有一些方法:

def sleep(self, seconds=0):
    seconds = seconds or self.wait_timer
    time.sleep(seconds)

方法调用者:

def _sleep_before_next(self, number: int) -> None:
    for counter, wait_timers in self.SLEEPING_RANGES.items():
        if number % counter == 0:
            self.sleep(random.choice(wait_timers))

我想测试使用self.sleep之一调用wait_timers。 所以可能的选择:

首先我现在正在使用:patch random.choice始终返回第一个元素,然后使用mock' s assert_has_calls

@mock.patch('random.choice', lambda iterable: iterable[0])
@mock.patch.object(MyClass, 'sleep')
def test_sleep_before_next_calling_time_sleep_with_correct_time(self, mock_time):
    self.my_class_instance._sleep_before_next(30)
    assert mock_time.call_count == 3
    calls = [mock.call(2), mock.call(3), mock.call(10)]
    mock_time.assert_has_calls(calls, any_order=True)

第二个选项是在random.choice上观察并查看所需的wait_timers已通过。 这两个选项都要求我模拟两个对象。所以,如果unittest.mock允许检查是否有一个参数传递给减少嘲讽的数量,我就会徘徊,例如。

>>> my_mock(20)
>>> my_mock.time.assert_called_with_one_of(10, 20, 30)
>>> True

0 个答案:

没有答案