Pytest模拟使用装饰器模拟包含上下文管理器返回值的函数未传递

凸轮

因此,由于上下文管理器,我正在努力模拟此功能。

被测功能

import fitz

def with_test_func(next_pdfs_path):
    text = ''
    with fitz.open(next_pdfs_path) as doc:
        text = doc
    return text

测试码

@mock.patch("content_production.fitz.open.__enter__", return_value='value_out')
def test_with_test_func(mock_fitz_open):
    assert cp.with_test_func('value_in') == 'value_out'

错误

RuntimeError: cannot open value_in: No such file or directory

我已经在没有上下文管理器的情况下对其进行了测试,并且可以正常工作。那么我该如何解决呢?谢谢

编辑

因此,按照@MrBean的建议,我尝试了

@mock.patch("content_production.fitz.open.return_value.__enter__", return_value='value_out')
def test_with_test_func(mock_fitz_open):
    assert cp.with_test_func('value_in') == 'value_out'

它给我这个错误

thing = <class 'fitz.fitz.Document'>, comp = 'return_value', import_path = 'content_production.fitz.open.return_value'

    def _dot_lookup(thing, comp, import_path):
        try:
            return getattr(thing, comp)
        except AttributeError:
>           __import__(import_path)
E           ModuleNotFoundError: No module named 'content_production.fitz'; 'content_production' is not a package

不来梅先生

问题在于这return_value是模拟的属性,而不是修补的函数的属性,因此您不能将其放入patch参数字符串中。相反,您必须在open方法的模拟上设置返回值

@mock.patch("content_production.fitz.open")
def test_with_test_func(mock_fitz_open):
    mock_fitz_open.return_value.__enter__.return_value = 'value_out'
    assert cp.with_test_func('value_in') == 'value_out'

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模拟上下文管理器中使用的类

来自分类Dev

仅使用装饰器配置返回值模拟

来自分类Dev

如何在装饰器中使用上下文管理器以及如何将在装饰器中创建的对象传递给装饰函数

来自分类Dev

如何在装饰器中使用上下文管理器以及如何将在装饰器中创建的对象传递给装饰函数

来自分类Dev

是否总是可以将实现内容管理器的类转换为使用上下文管理器装饰器的函数?

来自分类Dev

python上下文管理器不传递异常

来自分类Dev

Python:标准函数和上下文管理器?

来自分类Dev

在被测方法上模拟装饰器的返回值

来自分类Dev

上下文管理器反向

来自分类Dev

异步上下文管理器

来自分类Dev

Python-为具有上下文管理器的类方法创建模拟测试

来自分类Dev

Python上下文管理器到装饰器(反之)

来自分类Dev

Flask-Security上下文处理器的返回值如何使用?

来自分类Dev

Flask-Security上下文处理器的返回值如何使用?

来自分类Dev

将值从装饰器传递到Django中的上下文处理器

来自分类Dev

Android上下文问题-广播接收器(警报管理器)应使用什么上下文?

来自分类Dev

Python装饰器未返回值

来自分类Dev

Python装饰器未返回值

来自分类Dev

上下文管理器可以在 Python 中多次运行包含的块吗?

来自分类Dev

将参数传递给去上下文装饰器

来自分类Dev

我怎么知道一个函数是否可以在上下文管理器中使用?

来自分类Dev

Python修补程序上下文管理器返回对象

来自分类Dev

该功能在服务器上不起作用。在写上下文中不能使用函数返回值

来自分类Dev

如何__进入上下文管理器?

来自分类Dev

上下文管理器和多处理池

来自分类Dev

是否可以访问封闭的上下文管理器?

来自分类Dev

在python中调用上下文管理器

来自分类Dev

Python可迭代和上下文管理器

来自分类Dev

类实例内的上下文管理器

Related 相关文章

  1. 1

    模拟上下文管理器中使用的类

  2. 2

    仅使用装饰器配置返回值模拟

  3. 3

    如何在装饰器中使用上下文管理器以及如何将在装饰器中创建的对象传递给装饰函数

  4. 4

    如何在装饰器中使用上下文管理器以及如何将在装饰器中创建的对象传递给装饰函数

  5. 5

    是否总是可以将实现内容管理器的类转换为使用上下文管理器装饰器的函数?

  6. 6

    python上下文管理器不传递异常

  7. 7

    Python:标准函数和上下文管理器?

  8. 8

    在被测方法上模拟装饰器的返回值

  9. 9

    上下文管理器反向

  10. 10

    异步上下文管理器

  11. 11

    Python-为具有上下文管理器的类方法创建模拟测试

  12. 12

    Python上下文管理器到装饰器(反之)

  13. 13

    Flask-Security上下文处理器的返回值如何使用?

  14. 14

    Flask-Security上下文处理器的返回值如何使用?

  15. 15

    将值从装饰器传递到Django中的上下文处理器

  16. 16

    Android上下文问题-广播接收器(警报管理器)应使用什么上下文?

  17. 17

    Python装饰器未返回值

  18. 18

    Python装饰器未返回值

  19. 19

    上下文管理器可以在 Python 中多次运行包含的块吗?

  20. 20

    将参数传递给去上下文装饰器

  21. 21

    我怎么知道一个函数是否可以在上下文管理器中使用?

  22. 22

    Python修补程序上下文管理器返回对象

  23. 23

    该功能在服务器上不起作用。在写上下文中不能使用函数返回值

  24. 24

    如何__进入上下文管理器?

  25. 25

    上下文管理器和多处理池

  26. 26

    是否可以访问封闭的上下文管理器?

  27. 27

    在python中调用上下文管理器

  28. 28

    Python可迭代和上下文管理器

  29. 29

    类实例内的上下文管理器

热门标签

归档