@username0099220011

Pytest-mock — почему не подменяется функция?

Добрый день, пытаюсь написать тест,
часть кода тестируемой функции:
class StatusChecker():

     async def _is_alive_icmp(self, ip_addr: str) -> bool:
          try:
              host = await async_ping(ip_addr, count=cnf.ICMP_COUNT,
                                      privileged=False, timeout=3)
              return host.is_alive
          except:
              logger.exception("Не известная ошибка при отправке ICMP пакета")
 
          return False


Код теста:
def test_ip_is_ok(mocker, device_list):
    mocked = mocker.patch('icmplib.async_ping')
    mocked.return_value = True
    status_checker = StatusChecker()
    result_check = asyncio.run(status_checker._is_alive_icmp("192.168.0.1"))
    assert result_check == True

Ну и тест валится с ошибкой:
def test_ip_is_ok(mocker, device_list):
        mocked = mocker.patch('icmplib.async_ping')
        mocked.return_value = True
        status_checker = StatusChecker()
        result_check = asyncio.run(status_checker._is_alive_icmp("192.168.0.1"))
>       assert result_check == True
E       assert False == True

Добавил проверку что mocked не вызывается:
def test_that_to_ip_set_right_status_ip_is_ok(mocker, device_list):
        mocked = mocker.patch('icmplib.async_ping')
        mocked.return_value = True
        status_checker = StatusChecker()
        result_check = asyncio.run(status_checker._is_alive_icmp("192.168.0.1"))
>       assert mocked.call_count == 1


Если icmplib.async_ping заменить на status_checker.StatusChecker._is_alive_icmp - то тест проходит как и ожидалось, почему не работает с "icmplib.async_ping"?
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы