Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何测试一个函数调用其中的另一个函数_Python_Pytest_Python Unittest - Fatal编程技术网

Python 如何测试一个函数调用其中的另一个函数

Python 如何测试一个函数调用其中的另一个函数,python,pytest,python-unittest,Python,Pytest,Python Unittest,我正在使用模块pytest进行测试 问题:当我运行pytest时,它工作正常,但是如何阻止它调用我正在测试的函数中的函数呢 e、 g def下载\u csv(自): #这里的代码将下载csv #我想在这里之前测试代码,并且不运行decompress_csv()函数 self.decompression_csv() #假设此函数位于单独的测试文件中 def test_下载_csv(): 断言下载_csv()==#我将检查它是否已下载 您可以“模拟”该函数以返回一个值,该值允许测试被测系统中的其余逻

我正在使用模块pytest进行测试

问题:当我运行pytest时,它工作正常,但是如何阻止它调用我正在测试的函数中的函数呢

e、 g

def下载\u csv(自):
#这里的代码将下载csv
#我想在这里之前测试代码,并且不运行decompress_csv()函数
self.decompression_csv()
#假设此函数位于单独的测试文件中
def test_下载_csv():
断言下载_csv()==#我将检查它是否已下载
您可以“模拟”该函数以返回一个值,该值允许测试被测系统中的其余逻辑(在本例中,使用
下载\u csv
方法)

假设我们有这样一个requirements.txt

pytest
mock
使用这样的文件
test.py
,我们可以模拟
解压\u 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"

请注意,在正常情况下,您的测试代码可能位于与其测试的代码不同的文件中;这就是为什么我指出,包含函数的模块是关键的。你应该模拟函数,它实际上是一种方法,不是吗?这很重要,因为模仿方法的方式有点不同。向我们展示足够的代码,让我们有一个工作示例。我听说过mock,但从未使用过,也不知道如何实现它,你能举一个如何实现基本mock的例子吗