如何在Python中模拟sqlite3.connect

2024-03-04

我使用的是Python 3.3,在Anaconda环境下。

我想模拟 sqlite3.connect。例如在MyTests(见下文),我想要test_sqlite3_connect返回字符串connection而不是实际的sqlite3.Connection object.

我已经尝试修补它,但这不起作用。

from unittest.mock import patch
import unittest

import sqlite3

@patch('sqlite3.connect')
def sqlite3_connect(self,connection_string):
    print('connect with : {0}'.format(connection_string))
    return 'connection '

class MyTests(unittest.TestCase):

    def test_sqlite3_connect(self):

        print('testing connection')

        dbc = DataBaseClass()


class DataBaseClass():

    def __init__(self):
        print('initialising database class')
        self.connection = sqlite3.connect('test database')

我设法使用快速指南部分中的信息解决了这个问题

http://www.voidspace.org.uk/python/mock/ http://www.voidspace.org.uk/python/mock/

以下代码显示了模拟 sqlite3.connect 的两种方法。

''' An example of how to mock the sqlite3.connection method '''

from unittest.mock import MagicMock,Mock
import unittest
import sqlite3

class MyTests(unittest.TestCase):

    def test_sqlite3_connect_success(self):

        sqlite3.connect = MagicMock(return_value='connection succeeded')

        dbc = DataBaseClass()
        sqlite3.connect.assert_called_with('test_database')
        self.assertEqual(dbc.connection,'connection succeeded')


    def test_sqlite3_connect_fail(self):

        sqlite3.connect = MagicMock(return_value='connection failed')

        dbc = DataBaseClass()
        sqlite3.connect.assert_called_with('test_database')
        self.assertEqual(dbc.connection, 'connection failed')

    def test_sqlite3_connect_with_sideaffect(self):

        self._setup_mock_sqlite3_connect()

        dbc = DataBaseClass('good_connection_string')
        self.assertTrue(dbc.connection)
        sqlite3.connect.assert_called_with('good_connection_string')

        dbc = DataBaseClass('bad_connection_string')
        self.assertFalse(dbc.connection)
        sqlite3.connect.assert_called_with('bad_connection_string')

    def _setup_mock_sqlite3_connect(self):

        values = {'good_connection_string':True,
                  'bad_connection_string':False}

        def side_effect(arg):
            return values[arg]

        sqlite3.connect = Mock(side_effect=side_effect)


class DataBaseClass():

    def __init__(self,connection_string='test_database'):        
        self.connection = sqlite3.connect(connection_string)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中模拟sqlite3.connect 的相关文章

  • 如何在python 3.8中安装opencv-python

    我在 pycharm 中安装 opencv python 时遇到问题 打开 pycharm 后 我单击 设置 然后单击 项目解释器 单击 并搜索正确的模块 我开始安装 但失败了 Could not find a version that s
  • 赋值运算符左/右侧的不同切片行为

    作为一个来自 C 背景的 Python 新手 Python 3 4 x 中的切片运算符对我来说看起来很荒谬 我只是不明白 特殊规则 背后的设计理念 让我解释一下为什么我说它 特别 一方面 根据 Stack Overflow 的回答here
  • 为什么我的 jupyter 笔记本中不需要“%matplotlib inline”?

    我只是想理解为什么我的 jupyter 安装不需要我运行 matplotlib inline 根据我读过的所有内容 我应该运行它才能将我的绘图内联到我的 jupyter 笔记本中 但事实是 无论我是否运行 matplotlib inline
  • Theano导入错误

    我正在尝试在 CPU 机器上安装 Theano 运行 intel HD 显卡 没有 NVIDIA 在 python 中测试时出现以下导入错误 WARNING theano configdefaults g not detected Thea
  • ModuleNotFoundError:没有名为“pandas.io.formats.csvs”的模块

    我正在尝试创建一个简单的 csv dataframe to csv psv file name encoding utf 8 header True sep doublequote True quoting csv QUOTE ALL in
  • 如何在自动模式下获取 pytest 夹具返回值?

    我是新来学习 pytest 的 在下面的示例代码中 我怎样才能得到A 对象在test one夹具处于状态时的功能autouse mode import pytest import time class A def init self sel
  • Django Rest Framework 完整性错误捕获

    在 Django Rest Framework 中 我使用了序列化器 视图集和路由器方法 每当我在 django Rest 框架的 API 视图中发布故意错误时 它都会抛出完整性错误 有没有办法尝试捕获错误 例如如果数据中没有错误 则继续保
  • 在 Composite WPF (Prism) 中,我应该如何对我的控制器进行单元测试?

    我正在使用一个模块构建一个基本的复合 WPF Shell 我想对我的模块进行单元测试 显然 Composite WPF 以一种易于单元测试的方式模块化我的代码 下面是我想要进行单元测试的代码 它驻留在我的模块的控制器中 请注意标准复合 WP
  • 使用 python-3.x 从 zip 存档中读取 CSV 文件

    我有一个压缩档案 其中包含几个csv files 例如 假设myarchive zip包含myfile1 csv myfile2 csv myfile3 csv In python 2 7我能够迭代加载所有myfiles in pandas
  • 为什么不能在 f 字符串中使用“await”?

    为什么不能在 f 字符串中使用 await 有什么方法可以强制 f 字符串在协程函数的上下文中评估格式表达式吗 python3 Python 3 6 0 default Mar 4 2017 12 32 37 GCC 4 2 1 Compa
  • 存储整数列表的最有效方法

    我最近一直在做一个项目 其中一个目标是使用尽可能少的内存来使用 Python 3 存储一系列文件 除了一个整数列表之外 几乎所有文件都占用很少的空间 大致333 000整数长且整数可达约8000在尺寸方面 我目前正在使用pickle存储列表
  • 向 Python 函数添加属性的最佳方法

    以计算数学函数的 Python 函数为例 def func x a b c Return the value of the quadratic function ax 2 bx c return a x 2 b x c 假设我想以函数属性的
  • 组内条件计数

    我想在之后进行条件计数groupby 例如 按列的值分组A 然后计算每组中值出现的频率5出现在列中B 如果我整个过程都这样做DataFrame 只是len df df B 5 所以我希望我能做到df groupby A df B 5 siz
  • 使用 Pandas 来“applymap”来访问索引/列?

    解决以下 pandas 问题的最有效方法是什么 这是一个简化的示例 其中包含数据框中的一些数据 import pandas as pd import numpy as np df pd DataFrame np random randint
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • 使用 Django Rest 保存 Base64ImageField 类型会将其保存为原始图像。如何将其转换为普通图像

    我的模型中有 5 个图像字段 imageS imageS imageS imageS 和 imageE 我正在尝试按以下方式保存图像 图像的类型Base64ImageField images imageA imageB imageC ima
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • 如何跨多个文件跨越 javascript 命名空间?

    我永远忽略了javascript 几年前我开始使用 jQuery 这样我就可以过得去 但随着我开始更多地进行 TDD 我昨天决定真正深入研究 javascript 之后可能还有咖啡脚本 在我的 ASP NET Web 窗体应用程序中 我有很
  • 如何循环遍历字典列表并打印特定键的值?

    我是 Python 新手 有一个问题 我知道这是一个非常简单的问题 运行Python 3 4 我有一个需要迭代并提取特定信息的列表 以下是列表 称为部分 的示例 已截断 数千个项目 state DEAD id phwl type name

随机推荐

  • php_mongo 扩展已安装,但为什么 rockmongo 仍然无法连接?

    我有一个wamp服务器 我还安装了 mongodb 我已经安装了 php mongo 扩展 在 php ini 中进行更改 我下载了 rockmongo 将文件解压到我的 www 文件夹中 我编辑了配置文件 但是当我尝试打开 GUI 时 它
  • Rails 4 中具有多个字的控制器的路由

    我刚刚升级到 Rails 4 发现路由出现意外行为 我们有一个名为 EmailPreviewController 的控制器 其路由是 get emailpreview controller EmailPreview action index
  • 配置 webpack 以允许浏览器调试

    我是 webpack 的新手 我正在转换现有的 Web 应用程序以使用它 我正在使用 webpack 来捆绑和缩小我的 JS 这在部署时非常有用 但这使得在开发过程中调试非常困难 通常我使用 chrome 内置的调试器来调试 JS 问题 或
  • SQL Server 探查器

    当您使用 SQL Server 探查器时 持续时间和 CPU 之间有什么区别 我知道默认情况下两者都以毫秒显示 CPU 是运行查询所需的 CPU 时间 而持续时间更像是查询返回任何数据所需的时间 根据我的理解 如果存在任何阻塞等 您的 CP
  • 如何在Java中使用PDFBox获取PDF文件中的所有书签

    我是 Apache PDFbox 的新手 我想使用Java中的PDFBox库提取PDF文件中的所有书签 知道如何提取它们吗 来自在源码下载中 PDDocument document PDDocument load new File PDDo
  • 将表从一个数据库复制到另一个数据库的最简单方法?

    当数据库位于不同用户下时 将数据从一个数据库中的表复制到另一个数据库中的表的最佳方法是什么 我知道我可以使用 INSERT INTO database2 table2 SELECT from database1 table1 但这里的问题是
  • Android 应用程序通过移动端口使用 P2P 模式流式传输 IP 摄像机?

    我正在尝试通过 Android 应用程序上的 IP 摄像头流式传输视频 我已经使用以下方法成功获取了视频 使用媒体播放器和 Surface View 的 RTSP 使用视频视图的 RTSP 重定向到 VLC 以流式传输视频 重定向到本机 用
  • 实际示例使用 dup 或 dup2

    我知道什么dup dup2 http www opengroup org onlinepubs 009695399 functions dup html可以 但是不知道什么时候会用到 有什么实际例子吗 示例之一是 I O 重定向 为此 您分
  • android sdk 位置不能位于文件系统根目录

    我已经将 Android Studio 安装在 F 驱动器中 我的 Flutter 项目位于 E 驱动器中 Flutter插件安装在Android Studio中 但是当我在 Android Studio 中打开项目并转到 SDK 管理器时
  • 在具有自动高度的 IFrame 中获取 Google 表单

    所以我有一个用 Google Docs 构建的表单 因为它看起来比从头开始更容易 我通过将代码从谷歌页面复制粘贴到我的域上的页面来实现这一点 我设法用我在这里找到的这个可爱的小脚本让它自动调整其高度 http www frontpagewe
  • 仅在给定用户 ID 的情况下选择固定范围高分的有效方法

    我有一个表格 其中包含每个球员参加过的每场比赛的记录 从这个问题的最佳答案我已经有了一个很好的开始 百万条目排名 https stackoverflow com questions 5436263 ranking with millions
  • 检测android中的home按钮按下

    这已经让我发疯有一段时间了 有没有什么方法可以可靠地检测 Android 应用程序中是否按下了主页按钮 如果做不到这一点 是否有一种可靠的方法来判断是什么导致活动进入 onPause 即我们能否检测到它是否是由新活动启动或按返回 主页引起的
  • AWS DynamoDB - 如何在 1 次调用中实现:如果集合存在,则添加要设置的值 - 或者用值实例化集合?

    我有一个用户表 有一个名为 朋友 的属性 它将是用户所有朋友的 id 的集合 最初 我尝试在创建用户时将 Friends 属性实例化为空集 但收到错误消息 指出不能有空属性 因此 如果某人还没有朋友 我能找到的唯一解决方案是读取用户的属性
  • 内联插件不起作用

    根据Chart js 文档 http www chartjs org docs latest developers plugins html 以下代码应该可以工作 new Chart document getElementById char
  • Github 操作:在单个运行器中运行多个作业或在作业之间共享工作空间

    有什么方法可以在单个运行器中运行多个作业或在作业之间共享 Github 操作工作区 在我的组织中 开发团队使用由多个团队创建和管理的多个可重用工作流程 团队build创建和管理build yaml构建应用程序 我的团队创建并管理analys
  • 我可以在 Microsoft Access VBA 中使用变量作为控件的名称吗

    我有一个 Microsoft Access 弹出表单 用于查找地址 一旦用户找到邮政编码 该地址就会被放入其启动表单的各个文本框中 问题是 这个弹出表单是从整个数据库中的各种表单启动的 因此它将结果放入的文本框位于不同的位置 我尝试通过以下
  • 使用 Python 解析电子邮件

    我正在编写一个 Python 脚本来处理从Procmail http www procmail org 正如本文中所建议的question https stackoverflow com questions 1225586 checking
  • “Fluent Assertion”和“Should Assertion Library”的区别

    有人可以指出差异吗 以上确实是我的问题 但您是否也可以与他们分享您的经验以及为什么您使用其中之一 它们只是两个不同的库 因此只需查看功能 尤其是报告功能 然后进行选择 由于我是作者流畅的断言 我显然有偏见 不管怎样 我对我们为使错误消息尽可
  • 使用户能够在 Cognito 中重置过期的临时密码

    我知道管理员可以使用以下命令从控制台重置用户的临时密码 aws cognito idp admin create user region us east 1 user pool id us east 1 youruserpoolid use
  • 如何在Python中模拟sqlite3.connect

    我使用的是Python 3 3 在Anaconda环境下 我想模拟 sqlite3 connect 例如在MyTests 见下文 我想要test sqlite3 connect返回字符串connection而不是实际的sqlite3 Con