python - 在 Python 中模拟链式调用

标签 python unit-testing mocking python-mock

我正在尝试使用 unittestmock 库测试以下类:

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 是否具有我期望的值?

我想使用模拟库。在它的文档中,我有一个模拟链式调用 ( http://www.voidspace.org.uk/python/mock/examples.html#mocking-chained-calls ) 的示例,但我不太清楚如何使它适应我的问题。

Session.load(cookie) 方法在Session 实例中设置一些属性。我想为每个 cookie 值的测试设置固定值。

最佳答案

假设 Connection 位于模块 package.module.connection

以下代码应该是您测试 session 的方式:

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)

关于python - 在 Python 中模拟链式调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5319274/

相关文章:

Python 日期系列生成

python - 无法将自定义字段添加到 django-registration

unit-testing - 单元测试适合 BPM 开发吗?

python - 每次访问时更改的模拟属性

python - 在 python3 而不是 python 2 中安装 redis 模块

python - 升级 Ubuntu : python3 install is corrupted

Java Mocking - 在外部类中注入(inject) `equals` 和 `toString`

python - 如何以比应用程序更高的粒度在 Django 中对单元测试进行分组?

scala - 如何在Scala中使用功能参数模拟方法?

python - 在 python 中模拟整个模块