模拟不能与pytest和flexmock一起使用

仿制的

我正在尝试使用pytest固定装置模拟对调用的调用open(),然后在测试拆解时将其重置,但是由于某种原因,该模拟未应用到测试函数中。

这是我所拥有的样本:

# tests.py
@pytest.fixture(scope='module')
def mock_open(request):
    mock = flexmock(sys.modules['__builtin__'])
    mock.should_call('open')
    m = (mock.should_receive('open')
        .with_args('/tmp/somefile')
        .and_return(read=lambda: 'file contents'))
    request.addfinalizer(lambda: m.reset())

def test_something(mock_open):
    ret = function_to_test()
    ret[1]()  # This actually uses the original open()

并且,如果有问题的话,function_to_test()如下所示:

# some_module.py
def function_to_test():
    def inner_func():
        open('/tmp/somefile').read()   # <-- I want this call mocked
        # More code ...
    return (True, inner_func)

如果我使用xUnit样式setup_module()/teardown_module()功能,也会发生这种情况但是,如果我将模拟代码放在测试函数本身中(我显然不想这样做),那么它可以正常工作。

我想念什么?谢谢!

虚假的

怎么样使用mock


tests.py:

import mock # import unittest.mock (Python 3.3+)
import pytest

from some_module import function_to_test

@pytest.fixture(scope='function')
def mock_open(request):
    m = mock.patch('__builtin__.open', mock.mock_open(read_data='file content'))
    m.start()
    request.addfinalizer(m.stop)

def test_something(mock_open):
    ret = function_to_test()
    assert ret[1]() == 'file content'

some_module.py:

def function_to_test():
    def inner_func():
        return open('/tmp/somefile').read()
    return True, inner_func

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

开玩笑的模拟节点模块不能与打字稿一起使用

为什么:before和:after伪元素不能与`img`元素一起使用?

React:async 和 await 不能与 fetch 一起使用

Ajax / PHP / MySQL:将数据插入db不能与Ajax和PHP一起使用

'initial-delay'属性不能与cron和触发任务一起使用

Kaminari传呼机不能与Sinatra和Mongoid一起使用?

为什么Bootstrap行和列不能与车把一起使用?

SessionFactory和Session对象不能与“ try-with-resource”一起使用?

简单的启动项目不能与cljs和async一起使用

viewAction和ViewParam不能与新名称空间一起使用

替换字符串和方括号不能与RegExp一起使用

为什么这个数组和 foreach 不能与 mysqli 一起使用?

为什么存储过程不能与select,where和have一起使用

asp.net Webforms捆绑和压缩不能与.net Framework 4.0一起使用

XPath不能与XMLReader和SimpleXML一起使用吗?

EntityFramework 和 oracle 包含在 Where 子句中不能与变量一起使用

不能与文件列表一起使用forEach

QML图形效果不能与PyInstaller一起使用

maxlength不能与Karma一起使用

crontab不能与celery multi start一起使用

选择的 Angular 4 不能与 *ngFor 一起使用

WebStorm不能与gulp watch一起使用

jQuery each()不能与click()一起使用

TSQL:datediff不能与DEFAULT getdate()一起使用

为什么 foreach 不能与 String 一起使用?

Spacer 不能与 VStack 内的 Form 一起使用

为什么“ COALESCE”不能与“ GROUP BY”一起使用?

LibreOffice为什么不能与HUD一起使用?

引导词缀不能与Firefox一起正常使用