小编Amr*_*eja的帖子

Pytest 单元测试失败,因为目标函数有 cachetools.ttl_cache 装饰器

我有一个函数,我正在为使用 pytest 编写单元测试。唯一的问题是,由于我正在为同一个函数编写多个测试,由于 cachetools.ttl_cache 装饰器,一些测试失败了。这个装饰器使函数每次运行时都返回相同的值,这会扰乱测试。这个装饰器不存在于我正在测试的函数中,而是存在于我正在测试的函数调用的函数中。我无法从我正在测试的函数中删除这个装饰器。这是测试:

@patch('load_balancer.model_helpers.DBSession')
def test_returns_true_if_split_test_is_external(self, dbsession, group_ctx):
    group_ctx.group_id = '{}-{}'.format('2222222222', '123456789')
    split_test = Mock()
    split_test.state = 'external'
    config = {
        'query.return_value.filter.return_value.first.return_value': split_test
    }
    dbsession.configure_mock(**config)
    assert group_ctx.is_in_variation_group('foo') == True
Run Code Online (Sandbox Code Playgroud)

这是要测试的功能:

def is_in_variation_group(self, split_test=None):
    try:
        split_test = get_split_test(split_test) # This function has the 
        #decorator
        log.info('Split test {} is set to {}'.format(split_test.name,
                                                     split_test.state))
        if not split_test or split_test.state == 'off':
            return False

        phone_number = int(self.group_id.split('-')[0])
        if split_test.state == 'internal':
            return True if str(phone_number) in INTERNAL_GUINEA_PIGS else False
        if split_test.state == …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking pytest

6
推荐指数
1
解决办法
2181
查看次数

标签 统计

mocking ×1

pytest ×1

python ×1

unit-testing ×1