我想从我的Python应用程序中测试一个函数。代码如下所示:
import unittest
from unittest.mock import patch
from mock import MagicMock
import configparser
def read_config_sections(filename):
cp = configparser.ConfigParser()
cp.read(filename)
sections = list()
for section in cp.sections():
sections.append(section)
return sections
class TestReadConfigSection(unittest.TestCase):
@patch("__main__.open", MagicMock(return_value="[SECTION1]"))
def test_read_config_sections(self):
sections = read_config_sections("somename.ini")
self.assertEqual(["SECTION1"], sections)
if "__main__" == __name__:
unittest.main()
我想模拟open
方法使用的ConfigParser
函数来读取配置。谁能告诉我它怎么做得好?当我运行上面的代码时,变量sections
是一个空列表。
或许您可以更好地了解如何测试此功能。
答案 0 :(得分:1)
import configparser
import io
from mock import patch, mock_open
import unittest
def read_config_sections(filename):
cp = configparser.ConfigParser()
cp.read(filename)
sections = list()
for section in cp.sections():
sections.append(section)
return sections
class TestReadConfigSection(unittest.TestCase):
@patch("builtins.open", return_value=io.StringIO("[SECTION1]"))
def test_read_config_sections(self, mock_open):
sections = read_config_sections("somename.ini")
self.assertEqual(sections, ["SECTION1"])
if "__main__" == __name__:
unittest.main()
此处找到解决方案:https://mapleoin.github.io/perma/mocking-python-file-open
感谢您的帮助。
最好的问候。
答案 1 :(得分:0)
我相信您需要__builtins__.open
而不是__main__.open
您也可以使用mock_open
功能。