对依赖于数据库的函数进行单元测试

萨尔曼·哈西卜·谢赫

我正在对某些功能进行测试。我有一个使用数据库查询的函数。所以,我浏览了一些博客和文档,这些博客和文档说我们必须在内存或测试数据库中创建一个才能使用这些功能。下面是我的功能,

def already_exists(story_data,c):
    # TODO(salmanhaseeb): Implement de-dupe functionality by checking if it already
    # exists in the DB.
    c.execute("""SELECT COUNT(*) from posts where post_id = ?""", (story_data.post_id,))
    (number_of_rows,)=c.fetchone()
    if number_of_rows > 0:
        return True
    return False

此函数命中生产数据库。我的问题是,在测试时,我创建了一个内存数据库并在那里填充我的值,我将查询该数据库(测试数据库)。但是我想测试我的already_exists()函数,already_exists从测试调用我的函数后,我的生产数据库将被命中。在测试此功能时如何使我的测试数据库命中?

重的

问题是确保您的代码始终使用相同的数据库连接。然后您可以将其设置为适合当前环境的任何值。

与其将数据库连接从一个方法传递到另一个方法,不如使其成为单例更有意义。

def already_exists(story_data):
    # Here `connection` is a singleton which returns the database connection.
    connection.execute("""SELECT COUNT(*) from posts where post_id = ?""", (story_data.post_id,))
    (number_of_rows,) = connection.fetchone()
    if number_of_rows > 0:
        return True
    return False

或者connection在每个类上一个方法,already_exists变成一个方法。无论如何,它应该是一种方法。

def already_exists(self):
    # Here the connection is associated with the object.
    self.connection.execute("""SELECT COUNT(*) from posts where post_id = ?""", (self.post_id,))
    (number_of_rows,) = self.connection.fetchone()
    if number_of_rows > 0:
        return True
    return False

但实际上你不应该自己滚动这段代码。相反,您应该使用ORM,例如SQLAlchemy,它会为您处理基本查询和连接管理。它只有一个连接,即“会话”

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from sqlalchemy_declarative import Address, Base, Person

engine = create_engine('sqlite:///sqlalchemy_example.db')
Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)
session = DBSession()

然后你用它来进行查询。例如,它有一个exists方法

session.query(Post.id).filter(q.exists()).scalar()

使用 ORM 将大大简化您的代码。这是基础知识的简短教程,以及更长更完整的教程

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为依赖于其他服务或数据库的服务编写单元测试

如何对依赖于外部库“ <script src =“ http:// stripe [...]”的API进行单元测试

当processElement依赖于广播的数据时,如何在flink中对BroadcastProcessFunction进行单元测试

如何对依赖于springBoot applicationContext的单元测试方法进行单元测试?

依赖于数据库视图的集成测试

如何运行依赖于Android库模块的单元测试?

如何对依赖于 redux props 的组件进行单元测试

如何对依赖于ActivatedRoute参数的组件进行单元测试?

如何对依赖于实例属性的实例方法进行单元测试?

使用Jest对依赖于HTTP调用的代码进行单元测试的最佳方法?

如何对依赖于HttpContext.GetGlobalResourceObject的类进行单元测试?

如何对依赖于元素高度的组件进行单元测试(角度为5)?

单元测试依赖于StreamReader读取文件的方法

使用空手道进行依赖于数据库状态的测试的好方法吗?

如何在Flutter中对依赖于第三方包装的代码进行单元测试?

如何对一个依赖于其注册回调的Angular服务进行单元测试?

Typeorm 列类型依赖于数据库

ServiceStack:依赖于数据库本身的业务逻辑

如何对Django数据库迁移进行单元测试?

Python单元测试:如何对包含数据库操作的模块进行单元测试?

如何测试依赖于库的代码?

安全地编写依赖于相同文件资源的单元测试吗?

Python-依赖于先前功能结果的单元测试功能(链式功能)

依赖于64位itk框架的单元测试dll

依赖于其他吸气剂的单元测试Vuex吸气剂

依赖于全局事件总线的Vue组件的单元测试

规范化数据库,其中B依赖于A,C依赖于A,而D依赖于B + C

数据库单元测试框架?

数据库单元测试