Python 3.x 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

我知道也有类似的帖子,但我没有找到类似的帖子

我在python中有一个函数,它接收要读取和处理的文件名作为输入,并返回一些内容,我想测试函数的输出是否正确。例如:

#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中的行:
如果最大值