在pytest中使用mocker模拟类变量

2024-05-16 11:36:17 发布

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

我有一个大致如下的问题:

在一个文件中data.py我有


from typing import ClassVar
from tinydb import TinyDB
from dataclasses import dataclass

@dataclass
class Data:
    db: ClassVar = TinyDB("some_path")

    @property
    def some_data(self):
        return 100


我想模拟一下some_data方法

我试过:


import pytest
import pandas as pd
from package1.data import Data

@pytest.fixture
def mocked_raw_data(mocker):
    m = mocker.patch.object(
        Data, "some_data", return_value=10, new_callable=mocker.PropertyMock
    )

    )
    return m

def test_some_data(mocked_raw_data):
    assert Data().some_data == 2

但是很明显,这给了db方法类变量一个错误。我怎样才能模拟这个变量呢?我的方法通常有意义吗


Tags: 方法fromimportdbdatareturnpytestdef
1条回答
网友
1楼 · 发布于 2024-05-16 11:36:17

你用了@pytest.mark.django_db

这将有助于在单独的数据库(而不是生产数据库)上测试数据

关于你关于模仿的问题,你可以用猴子补丁来模仿

例如

def test_user_details(monkeypatch):
        mommy.make('Hallpass', user=user)
        return_data = 
            {
            'user_created':'done'
            }
        monkeypatch.setattr(
            'user.create_user', lambda *args, **kwargs: return_data)
        user_1 = create_user(user="+123456789")
        assert user_1.return_data == return_data

相关问题 更多 >