Python 如何创建被测试函数中对象使用的内置函数mock

Python 如何创建被测试函数中对象使用的内置函数mock,python,unit-testing,mocking,Python,Unit Testing,Mocking,我想从我的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()

我想从我的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()
我想模拟
ConfigParser
方法用于读取配置的
open
函数。有人能告诉我怎么做好吗?当我运行上面的代码时,变量
sections
是一个空列表


或者您可能对如何测试此函数有更好的想法。

我相信您想要的是
\uuu内置\uuuuuuuu.open
而不是
\uuuuuu.open

您也可以使用该函数

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()
可在此处找到解决方案:

谢谢你的帮助

致以最诚挚的问候。

当我使用builtins.open时,出现一个错误ImportError:没有名为“builtins”的模块Ok。相反,main.open我必须使用builtins.open,但是当我对它进行di时,会出现异常AttributeError:exit