Модульный тест Python игнорирует ложный ответ - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь сделать простой макет для пользовательской функции в Python.Эта функция вызывает aws и возвращает список IP-адресов для всех экземпляров в среде.Поскольку я пишу модульные тесты, я хочу иметь возможность смоделировать ответ от этой функции, поэтому мне не нужно нажимать AWS для тестирования.

Я думаю, что проблема связана с цельюпользуюсь.Я перепробовал все, что мог, но безуспешно.

Я пробовал использовать патч следующим образом:

def test_mock_ip_response(self):
    with patch("app.api.commands.ip_addresses", return_value=["10.10.10.10"]):
    results=ip_addresses("stage")
    print (results)
    assert False

и с декоратором:

@patch("app.api.commands.ip_addresses")
def test_mock_bash_response(self, mock_ip_addresses):
    mock_ip_addresses.return_value=["10.10.10.10"]
    results=ip_addresses("stage")
    print (results)
    assert False

В любом случае, функция ip_addresses всегда пыталась вызывать в AWS, поэтому вызов не улавливается.

О, и я знаю, что утверждения установлены в ложь, вот только Pytest покажетмне стандартный вывод для моего тестирования.

Обновление: включая код для ip_addresses:

def ip_addresses(environment: str) -> List[str]:
    client = get_client("ec2")

    filters = #removed since they contain naming conventions
    response = client.describe_instances(Filters=filters)

    return [
        i["PrivateIpAddress"] for r in response["Reservations"] for i in r["Instances"]
    ]

1 Ответ

0 голосов
/ 13 июня 2019

У меня все получилось, поэтому я обязательно опубликую ответ здесь. Это связано с тем, как я вызывал ip_addresses внутри моей тестовой функции.

Вместо звонка

results=ip_addresses

Мне просто нужно изменить это на:

results=commands.ip_addresses

...