首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python unitest mock,用于检查方法是否返回方法调用

Python unitest mock,用于检查方法是否返回方法调用
EN

Stack Overflow用户
提问于 2021-04-07 23:11:41
回答 1查看 34关注 0票数 0

我想知道如何简单地检查execute_db是否返回名为cursor.fetchone的方法调用?

我对db是否正常工作不感兴趣,这将在稍后的集成测试中完成。

我已经写了一个小的单元测试,但在这里我只是模拟返回值。我想要找到一种方法来测试具有给定名称的方法是否也被调用。

代码语言:javascript
复制
class DataChecker:
    def __init__(self):
        # Initialize class
        self.conn = sqlite3.connect("pos.db")
        self.cursor = self.conn.cursor()

    def execute_db(self, query, params=None):
        # Execute SQL query with parameters and return data
        self.cursor.execute(query, [params])
        self.conn.commit()
        return self.cursor.fetchone()

测试:

代码语言:javascript
复制
def test_execute_db():
    mock_datachecker = Mock()
    mock_datachecker.cursor.fetchone.return_value = "one"
    assert DataChecker.execute_db(mock_datachecker, "SELECT * FROM Customers;", 1) == "one"
EN

回答 1

Stack Overflow用户

发布于 2021-04-08 04:42:28

您可以模拟sqlite3中导入到DataChecker模块中的方法fetchone

db.py

代码语言:javascript
复制
import sqlite3


class DataChecker:
    def __init__(self):
        # Initialize class
        self.conn = sqlite3.connect("pos.db")
        self.cursor = self.conn.cursor()

    def execute_db(self, query, params=None):
        # Execute SQL query with parameters and return data
        if params:
            self.cursor.execute(query, params)
        else:
            self.cursor.execute(query)
        self.conn.commit()
        return self.cursor.fetchone()

然后,您可以使用db.sqlite3模拟connect().cursor().fetchone方法。

代码语言:javascript
复制
def test_execute_db():
    with patch('db.sqlite3') as mock_db:
        mock_db.connect().cursor().fetchone.return_value = "one"

        assert DataChecker().execute_db("SELECT * FROM Customers") == "one"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66988973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档