尝试为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
非常感谢您的帮助
答案 0 :(得分:0)
解决了这个问题,结果发现函数名称中有两个下划线。双下划线使python解释器可以重命名属性以防止冲突。更改函数名称以删除双下划线即可解决此问题。