当前位置: 首页 > 面试题库 >

如何模拟psycopg2游标对象?

吉毅
2023-03-14
问题内容

我在Python2中有以下代码段:

def super_cool_method():
    con = psycopg2.connect(**connection_stuff)
    cur = con.cursor(cursor_factory=DictCursor)
    cur.execute("Super duper SQL query")
    rows = cur.fetchall()

    for row in rows:
        # do some data manipulation on row
    return rows

我想为其编写一些单元测试。我想知道如何使用mock.patch它来修补游标和连接变量,以便它们返回伪造的数据集?我已经为单元测试尝试了以下代码段,但无济于事:

@mock.patch("psycopg2.connect")
@mock.patch("psycopg2.extensions.cursor.fetchall")
def test_super_awesome_stuff(self, a, b):
    testing = super_cool_method()

但是我似乎收到以下错误:

TypeError: can't set attributes of built-in/extension type 'psycopg2.extensions.cursor'

问题答案:

由于游标是的返回值con.cursor,因此您只需模拟连接,然后正确配置它。例如,

query_result = [("field1a", "field2a"), ("field1b", "field2b")]
with mock.patch('psycopg2.connect') as mock_connect:
    mock_connect.cursor.return_value.fetchall.return_value = query_result
    super_cool_method()


 类似资料:
  • 问题内容: 我想模拟对锚标签的点击,并带有所有类似正确目标处理之类的功能。 锚点的DOM对象似乎有一个[[click()] [3]“方法,但并非所有浏览器都支持。Firefox抛出此错误: 错误:anchorObj.click不是函数 它在Opera 10和Konqueror上也很奇怪,当在周围div的onclick处理函数中调用它时,会导致无限点击。我猜只有IE8可以正常工作。无论如何,我都不想

  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。

  • 我想测试一个调用对象的类(java中的静态方法调用),但我不能模拟这个对象以避免执行真正的方法。 any()方法来自mockito_kotlin。然后,如果我将一个模拟上下文传递给newIntent方法,则似乎调用了real方法。

  • 我试图模拟Scala单例对象。特别是,我需要模拟对象在服务组件(测试中的类)中使用。使用Mockito这是不可能的,测试执行会以以下方式失败: 在这里阅读,Scalamock似乎允许这样做: 要模拟独立的单例对象,请使用。 我的服务组件是这样的: 我的build.sbt有所有这些依赖关系: 但是我找不到这个: 也许这也可以使用EasyMock和PowerMock实现,但我找不到任何Scala示例代

  • 给定一个Kotlin单例对象和一个调用它的方法的乐趣

  • 问题内容: 我知道这种方法。但是,我想知道如何模拟事件。 我在堆栈溢出的某个地方找到了此代码,但我不知道如何使用它:( 如何使用JavaScript触发鼠标单击事件? 问题答案: (修改后的版本使之无需prototype.js即可工作) 您可以像这样使用它: 请注意,作为第三个参数,您可以传入’options’。您未指定的选项取自defaultOptions(请参见脚本底部)。因此,例如,如果您想