【问题标题】:Mocking class variable with mocker in pytest在 pytest 中使用 mocker 模拟类变量
【发布时间】:2020-02-27 17:19:16
【问题描述】:

我遇到的问题大致如下:

在文件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 方法类变量出错。我怎样才能模拟这个变量呢?我的方法通常有意义吗?

【问题讨论】:

    标签: python unit-testing mocking pytest


    【解决方案1】:

    你用过@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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2022-08-03
      • 2021-11-11
      • 2019-04-07
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多