对于复合 SQL 查询,go-sqlmock 中不需要使用 args [] 调用查询

我能够成功模拟查询以从一张表中进行选择,如下所示:


sqlMock.ExpectQuery("^SELECT DISTINCT (.+) FROM myTable1, myTable2").

        WillReturnRows(myResultRows)

但我无法模拟以下查询来检查我的 postgres 数据库中是否存在该表:


SELECT EXISTS

        ( SELECT 1

        FROM information_schema.tables

        WHERE table_schema = 'public'

           AND table_name = 'myTable3' );

组合:


    existsRows := sqlmock.NewRows([]string{"exists"}).

        AddRow(true)


    slMock.ExpectQuery("^SELECT EXISTS").

        WillReturnRows(existsRows)

我SELECT 1也尝试过嘲笑,但得到了完全相同的错误:


time="2019-09-27T15:49:41-07:00" level=panic msg="db query" error="call to Query 'SELECT EXISTS\n\t\t( SELECT 1\n\t\tFROM information_schema.tables\n\t\tWHERE table_schema = 'public'\n\t\t   AND table_name = 'myTable3' );' with args [], was not expected, next expectation is: ExpectedExec => expecting Exec or ExecContext which......

我正在使用的包:


import (

    "database/sql"

    "db"

    "os"

    "testing"


    // not explicitly called

    _ "github.com/denisenkom/go-mssqldb"

    _ "github.com/lib/pq"


    "github.com/DATA-DOG/go-sqlmock"

    "github.com/sirupsen/logrus"

)

任何想法或指示表示赞赏。我在网上找不到相关的例子


慕码人2483693
浏览 111回答 2
2回答

慕妹3146593

实际上,    sqlMock.ExpectQuery("SELECT EXISTS \\( SELECT 1 FROM information_schema\\.tables WHERE table_schema = 'public' AND table_name = 'myTable3' \\);").        WillReturnRows(existsRows)成功了。线索是它立即期待下一个查询。所以我们知道它根本没有读过这个。我的同事指出了这一点:)

动漫人物

我不确定,但认为问题出在您的查询的缩进中,尝试删除查询中的换行符或表格SELECT EXISTS        ( SELECT 1        FROM information_schema.tables        WHERE table_schema = 'public'           AND table_name = 'myTable3' );像这样 SELECT EXISTS( SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'myTable3' );
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go