Как проверить одну функцию, которая вызывает другую функцию внутри нее - PullRequest
0 голосов
/ 23 октября 2019

Я использую модуль pytest для тестирования

Проблема: Когда я запускаю pytest, он работает нормально, но как мне остановить его от вызова функции внутри функции, которую я тестирую

например

def download_csv(self):
    # code here will download csv

    # I want to test code up until here and dont run the decompress_csv() function
    self.decompress_csv()


# assume this function is in a separate test file
def test_download_csv():
    assert download_csv() == # i will check if it downloaded

1 Ответ

0 голосов
/ 23 октября 2019

Вы бы «насмехались» над этой функцией, чтобы получить значение, позволяющее проверить оставшуюся логику в тестируемой системе (в данном случае, метод download_csv).

Предполагая, что у нас естьТаким образом, с требованиями.txt,

pytest
mock

с файлом test.py, подобным этому, мы можем высмеивать функцию decompress_csv.

import mock


def decompress_csv():
    raise Exception("This will never be called by the test below")


def download_csv():
    decompressed = decompress_csv()
    return f"{decompressed} downloaded and processed"


def test_download_csv():
    # These additional variables are just to underscore what's going on:
    module_that_contains_function_to_be_mocked = 'test'
    mock_target = f"{module_that_contains_function_to_be_mocked}.decompress_csv"

    with mock.patch(mock_target, return_value='fake decompressed output'):
        assert download_csv() == "fake decompressed output downloaded and processed"

Обратите внимание, что в обычной ситуации ваш тесткод, скорее всего, будет в файле, отличном от кода, который он тестирует;вот почему я указал, что module_that_contains_function_to_be_mocked имеет решающее значение.

...