Макет объекта, используемый в родительском классе
У меня есть два класса в отдельных пакетах, один из которых наследуется от другого. Я хотел бы проверить детский класс.
Итак, как я могу издеваться над внешними объектами, используемыми в родительском классе? Я запутался, в каком пространстве имен они находятся в данный момент.
2 ответа
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)
...
Чтобы смоделировать что-либо импортированное и использованное в родительском модуле, вам нужно смоделировать это в родительском модуле.
а /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