You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:12:01