Python 如何测试一个函数调用其中的另一个函数
我正在使用模块pytest进行测试 问题:当我运行pytest时,它工作正常,但是如何阻止它调用我正在测试的函数中的函数呢 e、 gPython 如何测试一个函数调用其中的另一个函数,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()==#我将检查它是否已下载 您可以“模拟”该函数以返回一个值,该值允许测试被测系统中的其余逻
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的例子吗