0

我在不同的包中有两个类,其中一个继承自另一个。我想测试子类。

那么如何模拟父类中使用的外部对象呢?我很困惑他们现在驻留在哪个命名空间中。

4

2 回答 2

1
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)
             ...
于 2018-04-28T23:04:45.250 回答
0

要模拟在父模块中导入和使用的任何内容,您需要在父模块中模拟它。

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__()

在你的单元测试中

from b.b import B

from unittest.mock import patch

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

ABC
于 2018-05-05T12:25:19.670 回答