无法在 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 解释器重命名属性以防止冲突。更改函数名称以删除双下划线可解决此问题。
我在尝试为 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 解释器重命名属性以防止冲突。更改函数名称以删除双下划线可解决此问题。