运行unittest时触发ImportError:相对导入无已知父包问题求助
解决Python单元测试中的ImportError问题
目录结构说明
项目根目录下包含api/、Models/核心文件夹,具体层级:
api/v1/services/user_service.py:业务逻辑实现文件api/v1/tests/test_user_service.py:单元测试文件Models/models.py:数据模型文件
原始单元测试代码
import unittest from unittest.mock import patch, Mock from ..services.user_service import UserService class CreateUserTestCase(unittest.TestCase): # Mock Data full_name = "John Doe" phone_number = "1234567890" email = "john.doe@example.com" def test_create_user_service_success(self, mock_user_class): # 创建User模型的Mock实例 mock_user = Mock() # Mock User模型的save方法 mock_user.save.return_value = None # 替换真实的User类为Mock对象 with patch('Models.models.User', mock_user): # 已修正patch路径 # 调用服务方法 result = UserService.create_user(self.full_name, self.phone_number, self.email) # 断言 # assert result is not None # 确保服务方法返回结果 # assert mock_user.call_args == call(role_name="Admin", slug="admin", is_system_defined=True) assert mock_user.save.called_once()
执行命令及报错信息
在api/v1/tests/目录下执行测试命令:
python3 -m unittest test_user_service.py
运行后触发导入错误:
/api/v1/tests/test_user_service.py", line 3, in <module> from ..tests.test_user_service import UserService ImportError: attempted relative import with no known parent package
UserService中create_user函数实现
class UserService: def create_user(email: str): try: user = User() user.email = email user.save() return user.to_json() except Exception as e: return None
已尝试的修改代码
import sys import os project_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "....")) sys.path.append(project_dir) import unittest from unittest.mock import patch, Mock from api.v1.services.user_service import UserService from Models.models import User class CreateUserTestCase(unittest.TestCase): # Mock Data full_name = "John Doe" phone_number = "1234567890" email = "john.doe@example.com" @patch("Models.models.User") def test_create_user_service_success(self, mock_user_class): mock_user = mock_user_class.return_value mock_user.save.return_value = mock_user result = None result = UserService.create_user(self.email) assert mock_user.save.called_once()
问题需求
需要解决上述单元测试中的ImportError问题,找到可行的解决方案。
内容的提问来源于stack exchange,提问作者Mahek Adhaduk
相关产品推荐
相关产品推荐

