返回顶部
首页 > 资讯 > 精选 >使用 gorm 和 sqlmock 进行测试
  • 191
分享到

使用 gorm 和 sqlmock 进行测试

2024-02-05 22:02:19 191人浏览 泡泡鱼
摘要

问题内容 我正在努力使用 sqlmock 和 gORM 为我的 Go lambda 函数编写测试。 这是我要测试的功能: func docleanup(con *gorm.db) {

问题内容

我正在努力使用 sqlmock 和 gORM 为我的 Go lambda 函数编写测试

这是我要测试的功能:

func docleanup(con *gorm.db) {
    sixmonthsago := time.now().aDDDate(0, -6, 0).format("2006-02-01")
    con.where("date_to <= ?", sixmonthsago).delete(&availability{})
    con.where("date_to <= ?", sixmonthsago).delete(&reservation{})
}

这是我的测试:

func testdocleanup(m *testing.t) {
    var mock sqlmock.sqlmock
    var db *sql.db
    var err error

    db, mock, err = sqlmock.new()
    assert.nil(m, err)

    dialector := Mysql.new(mysql.config{
        dsn:                       "sqlmock_db_0",
        drivername:                "mysql",
        conn:                      db,
        skipinitializewithversion: true,
    })

    conn, err := gorm.open(dialector, &gorm.config{})
    if err != nil {
        m.errorf("failed to open connection to db: %v", err)
    }

    if conn == nil {
        m.error("failed to open connection to db: conn is nil")
    }

    defer db.close()

    mock.expectquery(fmt.sprintf("delete from availability where date_to <= '%s'", time.now().adddate(0, -6, 0).format("2006-02-01")))
    mock.expectquery(fmt.sprintf("delete from reservations where date_to <= '%s'", time.now().adddate(0, -6, 0).format("2006-02-01")))

    docleanup(conn)

    err = mock.expectationsweremet()
    assert.nil(m, err)

}

我不知道我做错了什么。这是我第一次使用 sqlmock。我已经阅读了一些地方,我的代码看起来不错,但我没有得到结果。我的错误是:

Expected nil, but got: &errors.errorString{s:"there is a remaining expectation which was not matched: ExpectedQuery => expecting Query, QueryContext or QueryRow which:\n  - matches sql: 'DELETE FROM availability WHERE date_to <= '2022-13-06''\n  - is without arguments"}

知道我做错了什么吗?


正确答案


我看到的主要问题在于您期望查询的方式。而不是

    mock.expectquery(fmt.sprintf("delete from availability where date_to <= '%s'", time.now().adddate(0, -6, 0).format("2006-02-01")))

你应该有:

    mock.expectbegin()
    mock.expectexec("delete from `availability` where date_to <= ?").
        withargs(time.now().adddate(0, -6, 0).format("2006-02-01")).
        willreturnresult(sqlmock.newresult(0, 0))
    mock.expectcommit()

这将告诉模拟您正在使用事务expectbeginexpectcommit 围绕删除),查询是使用参数进行的(withargs),以及查询的返回结果是什么(willreturnresult

还有一些其他的细微变化,例如表名周围的``(mysql 习惯用法)和表名(gorm 通常会将名称复数,因此您要么在 availability 上实现 tablename,要么默认为可用性)。

查看所有这些问题的最佳方法是更改​​ docleanup 以返回错误,然后在测试中查看它们:

func docleanup(con *gorm.db) error {
    sixmonthsago := time.now().adddate(0, -6, 0).format("2006-02-01")
    tx := con.where("date_to <= ?", sixmonthsago).delete(&availability{})
    if tx.error != nil {
        return tx.error
    }
    tx = con.where("date_to <= ?", sixmonthsago).delete(&reservation{})
    if tx.error != nil {
        return tx.error
    }
    return nil
}
...
    err = docleanup(conn)
    assert.nil(m, err)
...

这样做,并使用当前的代码,您将得到

Expected nil, but got: &errors.errorString{s:"call to database transaction Begin, was not expected, next expectation is: ExpectedQuery => expecting Query, QueryContext or QueryRow which:\n  - matches sql: 'DELETE FROM availability WHERE date_to <= '2022-13-06''\n  - is without arguments"}

这告诉您 sqlmock 并不期望 begin,解决该问题后您将得到本答案第一部分中解决的其他错误。

以上就是使用 gorm 和 sqlmock 进行测试的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 使用 gorm 和 sqlmock 进行测试

本文链接: https://lsjlt.com/news/561095.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用 gorm 和 sqlmock 进行测试
    问题内容 我正在努力使用 sqlmock 和 gorm 为我的 go lambda 函数编写测试。 这是我要测试的功能: func docleanup(con *gorm.db) { ...
    99+
    2024-02-05
  • 使用 go-sqlmock 测试 gorm 问题,将查询与mock.ExpectQuery 和 regexp.QuoteMeta 进行比较
    在开发过程中,使用 go-sqlmock 来测试 gorm 的问题是一种常见的需求。go-sqlmock 是一个用于模拟数据库操作的工具,而 gorm 则是一个流行的 Go 语言 OR...
    99+
    2024-02-11
  • Go单元测试对GORM进行Mock测试
    目录前言项目准备初始化测试工作对Create进行Mock测试Get 操作的Mock测试Update 操作的Mock测试总结前言 在 Go 单元测试这个系列的第二部分 数据库...
    99+
    2024-04-02
  • 使用sysbench对MySQL进行测试
    因sysbench版本更新问题,某些命令选项发生改变,查询help进行酌情更改。 https://yq.aliyun.com/articles/66651spm=5176.100239.blogcont6...
    99+
    2024-04-02
  • 使用traceview进行Android性能测试
      一、 TraceView工具简述   Traceview是android平台配备的一个很好的性能分析工具。它可以通过图形界面的方式让我们了解我们要跟踪的程序的性能,并...
    99+
    2022-06-06
    测试 Android
  • Java使用jmeter进行压力测试
    本篇文章简单讲一下使用jmeter进行压力测试。其压测思想就是 通过创建指定数量的线程,同时请求指定接口,来模拟指定数量用户同时进行某个操作的场景。 jmeter测试计划配置: 运行...
    99+
    2024-04-02
  • 如何使用Spring AOP进行测试
    本篇内容主要讲解“如何使用Spring AOP进行测试”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Spring AOP进行测试”吧!AOP解析今天来介...
    99+
    2024-04-02
  • WPF使用VisualTreeHelper进行命中测试
    一、简介 我们有时候又需求从当前视觉树中找一些东西,比如鼠标按下的时候,看看鼠标下的元素都有什么。又比如某块区域下有哪些元素?某个坐标点下有哪些元素?这些需求在使用 命中测试的时候,...
    99+
    2024-04-02
  • C#使用MSTest进行单元测试
    我之前写过一篇XUNit的简介:使用Xunit来进行单元测试。Xunit在当时确实是一个最简单易用的测试框架,然而,随着发展,Xunit也变得复杂了不少,光写一个最简单的测试就要导入...
    99+
    2024-04-02
  • Perl中怎么进行测试和调试
    在Perl中进行测试和调试通常使用的工具包括Test模块和调试器。以下是一些常用的方法: 使用Test模块进行单元测试:Test...
    99+
    2024-03-05
    Perl
  • 使用Apache ab进行http性能测试
    Mac自带了Apache环境 打开“终端(terminal)”,输入 sudo apachectl -v,(可能需要输入机器秘密)。如下显示Apache的版本 接着输入 sudo apachectl start,这样A...
    99+
    2022-06-04
    Apache ab http 性能测试
  • Android中使用Junit进行单元测试
      不管我们在学习还是在开发的时候,都会用到测试,在Android中进行的Junit单元工具测试需要创建一个类去继承于AndroidTestCase类,同时还需要在主配置文...
    99+
    2022-06-06
    单元 junit 单元测试 测试 Android
  • Android中使用JUnit进行自动测试
    假设你正在编写Android服务代码,而且,又要时不时的重构代码,那么,有效的方式是添加自动测试用例。在写过一个简单的sample以后,发现确实很容易,下面我google的...
    99+
    2022-06-06
    自动测试 自动 junit 测试 Android
  • 使用Django进行测试驱动开发
    目录创建项目配置 app编写测试用例编写代码执行测试最后的话所谓测试驱动开发(TDD),就是先编写测试用例,然后编写代码来满足测试用例,具体包含以下步骤: 编写测试用例。 ...
    99+
    2024-04-02
  • Java使用JMeter进行高并发测试
    目录常见的压力测试工具:使用JMeter进行高并发测试1.下载并安装JMeter2.使用JMeter进行测试3.生成测试报告4.分析测试报告软件的压力测试是一种保证软件质量的行为.在...
    99+
    2024-04-02
  • 如何使用Gateling进行性能测试
    这篇文章主要讲解了“如何使用Gateling进行性能测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Gateling进行性能测试”吧!Gatling是什么?Gatling 是一个用...
    99+
    2023-06-02
  • 如何使用 PHP 进行单元测试?
    单元测试检查软件的最小构成部分(如函数、方法),php 可通过 phpunit 框架进行单元测试。首先安装 phpunit,然后创建测试类(扩展自 testcase),再编写以 "tes...
    99+
    2024-04-19
    php 单元测试 composer
  • 使用 Go 泛型进行单元测试
    使用 go 泛型进行单元测试,可以创建适用于多种类型的通用测试函数,提高测试代码的可重用性、可维护性和可读性。具体优势包括:可重用性:泛型测试函数适用于多种类型,减少重复代码。可维护性:...
    99+
    2024-05-03
    单元测试 泛型 代码可读性
  • 使用Jasmine和Karma对AngularJS页面程序进行测试
    AngularJS是继jQuery之后发生在JavaScript上最好的东西。这也是JavaScript开发一直以来想要的方式。Angular主要的优点之一就是它的依赖注入(Dependency Injec...
    99+
    2022-06-04
    进行测试 页面 程序
  • Gorm 不同的列顺序和测试失败
    php小编新一在这里为大家介绍一个有关Gorm的问题:当我们在使用Gorm进行数据库查询时,不同的列顺序可能会导致测试失败的问题。这是因为Gorm在进行查询时,会根据结构体中字段的顺序...
    99+
    2024-02-10
    sql语句
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作