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

时间:2020-01-30 22:35:34

标签: python python-3.x python-unittest

尝试为python3脚本编写单元测试时遇到问题。在测试定义中运行时,该代码会引发AttributeError,但是如果我在测试定义类之外的同一文件中运行相同的代码,则不会抛出该错误。

代码:

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'

我进行了一次搜索,发现了一些关于单元测试中属性错误的问题和答案,但是还没有找到与该问题完全匹配的问题。


要注意的另一件事是,我用Monkey修补了import以返回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

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

解决了这个问题,结果发现函数名称中有两个下划线。双下划线使python解释器可以重命名属性以防止冲突。更改函数名称以删除双下划线即可解决此问题。

相关问题