如何模拟sqlalchemy模型的混合属性?

2024-05-14 03:41:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张桌子:

class A(Base):
    id = Column(Integer, primary_key=True, autoincrement=True)
    age = Column(Integer)

    @hybrid_property
    def is_adult(self):
        if self.age > 18:
            return True
        return False

表格的使用:

def check_adult():
    this_user = A.query.first()
    is_adult = this_user.is_adult
    if this_user.is_adult:
        return "Yes"
    else:
        return "No"

现在要为这段代码编写单元测试,我无法找到模拟is_值的方法

@patch("A")
def test_check_adult(mock_A):
    this_user = mock_A.return_value.query.return_value.first.return_value
    this_user.is_adult = True
    assert check_adult() == "Yes"

请提供模拟hybrid_属性和hybrid_方法的方法


Tags: 方法selftrueagereturnisvaluedef
1条回答
网友
1楼 · 发布于 2024-05-14 03:41:43

mock_A.return_value将模拟A(),但您不是调用A,而是访问其属性A.query等等,所以

this_user = mock_A.query.first.return_value

另外,在if语句中使用布尔表达式并返回TrueFalse有点多余。只需使用布尔表达式本身:

class A(Base):
    id = Column(Integer, primary_key=True, autoincrement=True)
    age = Column(Integer)

    @hybrid_property
    def is_adult(self):
        return self.age > 18

这还具有直接在查询上下文中工作的额外好处,因此不需要单独指定@is_adult.expression

相关问题 更多 >