在Python中模拟链式调用
我正在尝试使用 unittest
和 mock
库来测试以下这个类:
class Connection(object):
def __init__(self, cookie):
self.connect = None
self.session = Session()
self.session.load(cookie)
# do some stuff with self.session
self.some_info = self.session.data['the_info']
我想知道,当我创建一个 Connection
的实例时,如何根据 Session
实例的返回值来检查 self.some_info
是否是我预期的值?
我希望使用 mock 库。在它的文档中,我看到有一个关于模拟链式调用的例子(http://www.voidspace.org.uk/python/mock/examples.html#mocking-chained-calls),但我不太清楚如何将它适应到我的问题上。
这个 Session.load(cookie)
方法会在 Session
实例中设置一些属性。我希望在我的测试中为每个 cookie 的值固定这些属性。
1 个回答
3
假设 Connection
是在模块 package.module.connection
里。
下面的代码是你测试会话的方式:
import mock
class TestConnection(unittest.TestCase):
@mock.patch('package.module.connection.Session')
def test_some_info_on_session_is_set(self, fake_session):
fake_session.data = {'the_info': 'blahblah'}
cookie = Cookie()
connection = Connection(cookie)
self.assertEqual(connection.some_info, 'blahblah')
fake_session.load.assert_called_once_with(cookie)