无法在 python 单元测试中 运行 代码

Unable to run code inside python unit test

我在尝试为 python3 脚本编写单元测试时遇到问题。代码在 运行 测试定义内抛出 AttributeError ,但如果我 运行 在测试定义之外的同一文件中的相同代码 class.

代码:

class TestDataCleaningMethods(unittest.TestCase):
    def test_one(self):
        data = pd.DataFrame(columns=[
            'categoryId',
            'regionId',
            'districtId',
            'jobType',
            'contractType',
            'payType'])
        result = service.__columns_to_snake_case(data)

抛出以下错误:

AttributeError: module 'service' has no attribute '_TestDataCleaningMethods__columns_to_snake_case'

我四处搜索,发现了一些关于单元测试属性错误的问题和答案,但没有看到任何与这个问题完全匹配的问题和答案。


另一件需要注意的事情是,我已经将 import Monkey 修补到 return Mocks,但我看不到它会干扰 unittest 的功能。为了完整起见,这是代码:

orig_import = __import__

original_imports = [
    "service",
    "pandas"
]

def import_mock(name, *args):
    if name in original_imports:
        print(f"Using original imports for {name}")
        return orig_import(name, *args)
    print(f"Mocking {name}")
    return mock.MagicMock()


with mock.patch('builtins.__import__', side_effect=import_mock):
    import service

非常感谢任何帮助

解决了,原来是函数名中双下划线的问题。双下划线使 python 解释器重命名属性以防止冲突。更改函数名称以删除双下划线可解决此问题。