Как пропатчить класс, который вызыватся в __init__ другого класса?

Собственно вопрос.
Как пропатчить класс, который вызыватся в __init__ другого класса?
Так как сейчас, в очень похожем коде, подмена не происходит. Возможно я не правильно понимаю работу @patch

class B(object):

    def some1(self):
        print 'some 1'


class C(object):

    def some2(self):
        print 'some 2'


class A(object):

    def __init__(self):
        self.b = B()
        self.c = C()

    def just_do_it(self):
        print 'Hello'


class BMock(object):
    pass


class CMock(object):
    pass


class ATestCase(TestCase):

    @patch('B', BMock)  # lambda *args, **kwargs: BMock()
    @patch('C', CMock)  # lambda *args, **kwargs: CMock()
    def test_success_just_do_it(self):
        a = A()
        a.just_do_it()
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
@Andy_U
Если я Вы хотели протестировать такой код, то решение (для Python 2.7.11) ниже.

import unittest
import mock


class B(object):
    def some1(self):
        print 'some 1'


class C(object):
    def some2(self):
        print 'some 2'


class A(object):
    def __init__(self):
        self.b = B()
        self.c = C()

    def just_do_it(self):
        print 'Hello'
        self.b.some1()
        self.c.some2()


class BMock(object):
    def some1(self):
        print 'mock.some 1'


class CMock(object):
    def some2(self):
        print 'mock.some 2'


class ATestCase(unittest.TestCase):

    @mock.patch('main.B')
    @mock.patch('main.C')
    def test_success_just_do_it(self, c, b):
        b.side_effect = BMock
        c.side_effect = CMock
        a = A()
        a.just_do_it()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы