Переменная пересмешного класса с пересмешником в pytest - PullRequest
0 голосов
/ 27 февраля 2020

У меня проблема примерно такая:

В файле 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. Как я могу издеваться над этой переменной? Мой подход вообще имеет смысл?

1 Ответ

0 голосов
/ 28 февраля 2020

Использовали ли вы @pytest.mark.django_db?

Это помогло бы в тестировании данных на отдельной БД, а не на рабочей.

А что касается вопроса о насмешках, вы можете использовать monkey patch для насмешек

Например,

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
...