Python:用于测试功能的模拟文件输入

时间:2017-04-23 05:18:22

标签: python-3.x unit-testing mocking

我知道有类似的帖子,但我没有找到类似这样的帖子。

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

q3

如何创建模拟文件来测试此函数而无需编写读取文件?

这是我发现最接近我需要的东西(http://www.voidspace.org.uk/python/mock/helpers.html#mock-open

1 个答案:

答案 0 :(得分:0)

在遇到同样的问题后,请在下面找到我的答案。其中大部分来自: http://omiron.ro/post/python/how_to_mock_open_file/。 我通过Eclipse中的pydev插件使用了Python 3.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