Макет объекта, используемый в родительском классе - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть два класса в отдельных пакетах, один из которых наследуется от другого. Я хотел бы проверить детский класс.

Так, как я могу издеваться над внешними объектами, используемыми в родительском классе? Я запутался, в каком пространстве имен они находятся в данный момент.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Чтобы смоделировать что-либо импортированное и использованное в родительском модуле, вам нужно смоделировать это в родительском модуле.

а / a.py

import subprocess

class A(object):
    def __init__(self):
        print(subprocess.call(['uname']))

б / b.py

from a.a import A

class B(A):
    def __init__(self):
        super(B, self).__init__()

В вашем юнит-тесте

from b.b import B

from unittest.mock import patch

with patch('a.a.subprocess.call', return_value='ABC'):
    B()

ABC
0 голосов
/ 29 апреля 2018
class A:
    def foo(self):
        # Make some network call or something


class B(A):
    def bar(self):
        self.foo()
        ...


class BTestCase(TestCase):
    def setUp(self):
        self.unit = B()

    def test_bar(self):
         with mock.patch.object(self.unit, 'foo') as mock_foo:
             mock_foo.return_value = ...
             result = self.unit.bar()
             self.assertTrue(mock_foo.called)
             ...
...