Как макетировать / исправлять весь класс? - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть следующий код:

pkg1/mock_class.py:

class A:
    def ma(self):
        print(' class_A')


class B:
    def __init__(self):
        self.var = 'vvv'

    def mb(self):
        a = A()
        print('class_B')
        a.ma()

и тестовый код:

from unittest import mock
import pytest
from pkg1.mock_class import B


@pytest.fixture(scope='class')
def mockA():
    with mock.patch('pkg1.mock_class.A'):
        yield

class TestB:
    def test_b(self, mockA):
        b = B()
        b.mb()

Я хочу смоделировать весь класс A (), используя приспособление, и я хотел бы иметь возможность настроитьнекоторые возвращаемые значения, вероятно, будут использовать параметризацию в будущем.

Basic - просто насмешка / исправление, как реализовано выше, не является рабочим классом B, и я не понимаю, почему.

Спасибо за совет.

Яно

1 Ответ

0 голосов
/ 30 ноября 2018

Приведенный выше код работает правильно, я думал, что он не работает, потому что в реальном сценарии это не так - я исправлял неверное место.

из официальной документации ( ссылка ):

patch () работает (временно) изменяя объект, на который указывает имя, с другим.Может быть много имен, указывающих на какой-либо отдельный объект, поэтому для исправления для работы вы должны убедиться, что вы исправляете имя, используемое тестируемой системой.

Основной принцип заключается в том, что вы исправляете, когда объект ищется, которое не обязательно совпадает с местом, где оно определено.Несколько примеров помогут прояснить это.

...