我在单独的软件包中有两个类,其中一个是从另一个包含的。我想测试孩子课。
那么如何模拟父类中使用的外部对象?我在这一点上居住的命名空间很困惑。
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/a.py
import subprocess
class A(object):
def __init__(self):
print(subprocess.call(['uname']))
b/b.py
from a.a import A
class B(A):
def __init__(self):
super(B, self).__init__()
在您的Unitest
中from b.b import B
from unittest.mock import patch
with patch('a.a.subprocess.call', return_value='ABC'):
B()
ABC