使用 args [] 调用查询,在复合 SQL 查询的 go-sqlmock 中是不应该的



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

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 EXISTSntt( SELECT 1nttFROM information_schema.tablesnttWHERE table_schema = 'public'ntt   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"
)

任何想法或指示都值得赞赏。我在互联网上找不到相关示例

实际上,


sqlMock.ExpectQuery("SELECT EXISTS \( SELECT 1 FROM information_schema\.tables WHERE table_schema = 'public' AND table_name = 'myTable3' \);").
WillReturnRows(existsRows)

做到了。

更多示例如下: https://chromium.googlesource.com/external/github.com/DATA-DOG/go-sqlmock/+/e36ad8d068217ee8e4df50408476b153e115e3e6/README.md

我也用了 regex101.com

线索是它正在等待下一个查询。所以我们知道它根本没有读过这个。我的同事指出了这一点:)

我不确定,但认为问题出在查询的缩进中,尝试删除查询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' );

最新更新