您的位置:首页 > 新闻 > 热点要闻 > 在线产品设计_网站制作接单平台_长尾关键词挖掘词_西安网络推广公司大全

在线产品设计_网站制作接单平台_长尾关键词挖掘词_西安网络推广公司大全

2025/6/5 18:00:40 来源:https://blog.csdn.net/qq_52964132/article/details/146091215  浏览:    关键词:在线产品设计_网站制作接单平台_长尾关键词挖掘词_西安网络推广公司大全
在线产品设计_网站制作接单平台_长尾关键词挖掘词_西安网络推广公司大全

使用 pytestMagicMock 模拟数据库操作,并测试假设的 create_user 函数,将用户添加到数据库中。

代码实现

from datetime import date
from typing import List, Optional
from unittest.mock import MagicMock
from pydantic import BaseModel, Field, EmailStr
from sqlalchemy.orm import Session# 假设的枚举类
class GenderType:DEFAULT = "DEFAULT"MALE = "MALE"FEMALE = "FEMALE"# 假设的 Employment 和 CustomerInfo 类
class Employment(BaseModel):company: strposition: strclass CustomerInfo(BaseModel):merchant_id: intloyalty_points: int# UserBase 类
class UserBase(BaseModel):nickname: str = Field(..., description="微信用户昵称")avatar_url: Optional[str] = Field(None, description="微信用户头像URL")# User 类
class User(UserBase):id: int = Field(..., description="用户ID")union_id: Optional[str] = Field(None, description="微信用户唯一标识")name: Optional[str] = Field(None, description="用户真实姓名")gender: Optional[GenderType] = Field(GenderType.DEFAULT,description="用户性别,DEFAULT: 默认,MALE: 男,FEMALE: 女",)mobile: Optional[str] = Field(None, description="用户手机号")birthdate: Optional[date] = Field(None, description="用户生日")email: Optional[EmailStr] = Field(None, description="用户邮箱")address: Optional[str] = Field(None, description="用户地址")employments: Optional[List[Employment]] = Field(None, description="在不同商户中,用户作为员工所拥有的员工组信息")customers: Optional[List[CustomerInfo]] = Field(None, description="在不同商户中,用户作为顾客所拥有的信息")class Config:orm_mode = True# 假设的 create_user 函数
def create_user(db: Session, user_data: UserBase) -> User:# 模拟创建用户user = User(id=1,  # 假设生成的用户IDnickname=user_data.nickname,avatar_url=user_data.avatar_url,union_id="mock_union_id",name="Mock User",gender=GenderType.DEFAULT,mobile="1234567890",birthdate=date(1990, 1, 1),email="mock@example.com",address="Mock Address",employments=[Employment(company="Mock Company", position="Mock Position")],customers=[CustomerInfo(merchant_id=1, loyalty_points=100)],)db.add(user)db.commit()return user# 测试代码
def test_create_user():# 创建一个模拟的数据库会话db = MagicMock(spec=Session)# 创建测试数据user_data = UserBase(nickname="test_user", avatar_url="https://example.com/avatar.jpg")# 调用 create_user 函数user = create_user(db, user_data)# 断言 db.add 被调用了一次,并且传入的参数是模拟的 user 对象db.add.assert_called_once_with(user)# 断言 db.commit 被调用了一次db.commit.assert_called_once()# 断言返回的 user 对象有正确的属性assert user.id == 1assert user.nickname == "test_user"assert user.avatar_url == "https://example.com/avatar.jpg"assert user.union_id == "mock_union_id"assert user.name == "Mock User"assert user.gender == GenderType.DEFAULTassert user.mobile == "1234567890"assert user.birthdate == date(1990, 1, 1)assert user.email == "mock@example.com"assert user.address == "Mock Address"assert len(user.employments) == 1assert user.employments[0].company == "Mock Company"assert user.employments[0].position == "Mock Position"assert len(user.customers) == 1assert user.customers[0].merchant_id == 1assert user.customers[0].loyalty_points == 100

解释

  1. UserBaseUser: 这些类是基于你提供的代码实现的,包含用户的字段和配置。

  2. create_user 函数: 这是一个假设的函数,它接受一个数据库会话 (db) 和用户数据 (UserBase),并创建一个 User 对象,将其添加到数据库中。

  3. test_create_user 函数: 这是测试函数,我们在这里测试 create_user 函数的行为。
    • 首先创建一个模拟的数据库会话 db
    • 然后创建测试数据 user_data
    • 调用 create_user 函数,并传入模拟的 db 和测试数据。
    • 使用 assert_called_once_with 来验证 db.adddb.commit 是否被正确调用。
    • 使用 assert 来验证返回的 user 对象具有正确的属性。

运行测试

  1. 将上述代码保存为一个 Python 文件(例如 test_user.py)。

  2. 确保已安装 pytest。如果未安装,可以使用以下命令安装:

    pip install pytest
    
  3. 在终端中运行以下命令来执行测试:

    pytest test_user.py
    

预期输出

如果测试通过,会看到类似以下的输出:

============================= test session starts =============================
platform darwin -- Python 3.x.x, pytest-7.x.x, pluggy-1.x.x
rootdir: /path/to/your/project
collected 1 itemtest_user.py .                                                      [100%]============================== 1 passed in 0.01s ==============================

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com