如何对自定义上下文管理器进行单元测试?

卷出

我具有以下函数,该函数产生pyodbc.connect()要与with语句一起使用对象

from contextlib import contextmanager
import pyodbc

@contextmanager
def get_db_connection(conn_string, **kwargs):
    try:
        conn = pyodbc.connect(conn_string, **kwargs)
        yield conn
    except Exception as connection_error:
        raise ValueError('Could not connect to db.', connection_error) from None
    finally:
        conn.close()

我想为此功能编写单元测试,以测试可以打开,关闭连接,并在发生错误时ValueError引发a。我有:

from unittest.mock import Mock, patch
from db.query import get_db_connection

@patch('db.query.pyodbc.connect')
def test_get_db_connection(self, mock_connect):
    conn_string = Mock()
    with get_db_connection(conn_string) as conn:
        pass
    # print(conn) is acceptable here and prints:
    # <MagicMock name='connect()' id='2595126451264'>
    mock_connect.assert_called_once()

    mock_connect.side_effect = Exception()
    def _t():
        with get_db_connection(conn_string) as conn:
            pass

    self.assertRaises(UnboundLocalError, _t)

此处的所有内容都会运行并通过,但是我注意到在关闭语句范围conn之后,可用with

如何编写使用的单元测试,get_db_connection()mock使conn变量的行为符合我的期望?还是有另一种方法可以对它进行充分的单元测试?

卷出

采用

  • conn.close.assert_not_called()检查连接是否在第一个with块中打开
  • conn.close.assert_called_once()在第一个with之后检查连接是否关闭
  • try块中发生错误时,已经存在没有建立连接的检查-UnboundLocalError:分配前引用了本地变量'conn'

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

上下文管理器的单元测试失败,并出现AttributeError:__exit__

来自分类Dev

如何在Xubuntu XFCE Thunar文件管理器中自定义文件上下文菜单?

来自分类Dev

如何在Xubuntu XFCE Thunar文件管理器中自定义文件上下文菜单?

来自分类Dev

Django单元测试-如何断言自定义管理器调用UserManager.create_user方法?

来自分类Dev

在Windows资源管理器中自定义Winrar上下文菜单处理程序

来自分类Dev

通过 Windows 资源管理器上下文菜单调用自定义存档程序

来自分类Dev

如何对自定义的Jackson JsonSerializer进行单元测试?

来自分类Dev

如何使用Java对自定义日期反序列化器进行单元测试

来自分类Dev

如何使用Java对自定义日期反序列化器进行单元测试

来自分类Dev

如何使用Jasmine(Angular JS)对自定义装饰器进行单元测试

来自分类Dev

如何在Python中对需要活动Click上下文的函数进行单元测试

来自分类Dev

如何对使用上下文的类进行单元测试?

来自分类Dev

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

来自分类Dev

上下文管理器反向

来自分类Dev

异步上下文管理器

来自分类Dev

如何对作为跟踪源对象包装器的自定义记录器进行单元测试

来自分类Dev

如何对作为跟踪源对象包装器的自定义记录器进行单元测试

来自分类Dev

如何对用ServiceFilterAttribute和自定义ActionFilter实现装饰的控制器进行单元测试

来自分类Dev

我应该如何使用大猩猩上下文对中间件软件包进行单元测试

来自分类Dev

如何在Spring应用程序上下文中添加内部类以进行单元测试?

来自分类Dev

对ngx形式的自定义模板进行单元测试

来自分类Dev

对自定义STL兼容的容器和迭代器进行单元测试

来自分类Dev

Spring Batch:对自定义项目阅读器进行单元测试

来自分类Dev

使用Enzyme进行React单元测试不会重新绑定助手功能的上下文

来自分类Dev

使用上下文的React组件很难进行单元测试

来自分类Dev

遍历多个文件的上下文管理器类型-测试

来自分类Dev

遍历多个文件的上下文管理器类型-测试

来自分类Dev

Python:如何对自定义HTTP请求处理程序进行单元测试?

来自分类Dev

如何在Swift中对该自定义UITextField进行单元测试?

Related 相关文章

  1. 1

    上下文管理器的单元测试失败,并出现AttributeError:__exit__

  2. 2

    如何在Xubuntu XFCE Thunar文件管理器中自定义文件上下文菜单?

  3. 3

    如何在Xubuntu XFCE Thunar文件管理器中自定义文件上下文菜单?

  4. 4

    Django单元测试-如何断言自定义管理器调用UserManager.create_user方法?

  5. 5

    在Windows资源管理器中自定义Winrar上下文菜单处理程序

  6. 6

    通过 Windows 资源管理器上下文菜单调用自定义存档程序

  7. 7

    如何对自定义的Jackson JsonSerializer进行单元测试?

  8. 8

    如何使用Java对自定义日期反序列化器进行单元测试

  9. 9

    如何使用Java对自定义日期反序列化器进行单元测试

  10. 10

    如何使用Jasmine(Angular JS)对自定义装饰器进行单元测试

  11. 11

    如何在Python中对需要活动Click上下文的函数进行单元测试

  12. 12

    如何对使用上下文的类进行单元测试?

  13. 13

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

  14. 14

    上下文管理器反向

  15. 15

    异步上下文管理器

  16. 16

    如何对作为跟踪源对象包装器的自定义记录器进行单元测试

  17. 17

    如何对作为跟踪源对象包装器的自定义记录器进行单元测试

  18. 18

    如何对用ServiceFilterAttribute和自定义ActionFilter实现装饰的控制器进行单元测试

  19. 19

    我应该如何使用大猩猩上下文对中间件软件包进行单元测试

  20. 20

    如何在Spring应用程序上下文中添加内部类以进行单元测试?

  21. 21

    对ngx形式的自定义模板进行单元测试

  22. 22

    对自定义STL兼容的容器和迭代器进行单元测试

  23. 23

    Spring Batch:对自定义项目阅读器进行单元测试

  24. 24

    使用Enzyme进行React单元测试不会重新绑定助手功能的上下文

  25. 25

    使用上下文的React组件很难进行单元测试

  26. 26

    遍历多个文件的上下文管理器类型-测试

  27. 27

    遍历多个文件的上下文管理器类型-测试

  28. 28

    Python:如何对自定义HTTP请求处理程序进行单元测试?

  29. 29

    如何在Swift中对该自定义UITextField进行单元测试?

热门标签

归档