我能够成功模拟查询以从一张表中进行选择,如下所示: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")任何想法或指示表示赞赏。我在网上找不到相关的例子
2 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
实际上,
sqlMock.ExpectQuery("SELECT EXISTS \\( SELECT 1 FROM information_schema\\.tables WHERE table_schema = 'public' AND table_name = 'myTable3' \\);").
WillReturnRows(existsRows)
成功了。
线索是它立即期待下一个查询。所以我们知道它根本没有读过这个。我的同事指出了这一点:)
动漫人物
TA贡献1815条经验 获得超10个赞
我不确定,但认为问题出在您的查询的缩进中,尝试删除查询中的换行符或表格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' );
- 2 回答
- 0 关注
- 110 浏览
添加回答
举报
0/150
提交
取消