Python 3.x Python:用于测试函数的模拟文件输入
我知道也有类似的帖子,但我没有找到类似的帖子 我在python中有一个函数,它接收要读取和处理的文件名作为输入,并返回一些内容,我想测试函数的输出是否正确。例如:Python 3.x Python:用于测试函数的模拟文件输入,python-3.x,unit-testing,mocking,Python 3.x,Unit Testing,Mocking,我知道也有类似的帖子,但我没有找到类似的帖子 我在python中有一个函数,它接收要读取和处理的文件名作为输入,并返回一些内容,我想测试函数的输出是否正确。例如: #main function def myfunction(filename): f=open(filename) for line in f: # process data pass f.close() return # something #test funct
#main function
def myfunction(filename):
f=open(filename)
for line in f:
# process data
pass
f.close()
return # something
#test function for the main function
def test_myfunction():
mockfile = #mymockfile
assert myfunction(mockfile) == #something
我如何创建一个模拟文件来测试这个函数,而不必编写一个读取文件
这是我发现的最接近我需要的东西()同样的问题,请在下面找到我的答案。其中大部分来自: . 我通过Eclipse中的pydev插件使用了Python3.6和Py.test
import unittest.mock as mock
from unittest.mock import mock_open
#main function
def myfunction(filename):
f=open(filename)
maximum = 0
for line in f:
if maximum < len(line):
maximum = len(line)
pass
f.close()
return maximum
#test function for the main function
@mock.patch('builtins.open', new_callable=mock_open, create=True)
def test_myfunction(mock_open):
mock_open.return_value.__enter__ = mock_open
mock_open.return_value.__iter__ = mock.Mock(
return_value = iter(['12characters', '13_characters']))
answer = myfunction('foo')
assert not answer == 12
assert answer == 13
将unittest.mock导入为mock
从unittest.mock导入mock_open
#主要功能
def myfunction(文件名):
f=打开(文件名)
最大值=0
对于f中的行:
如果最大值