gpt4 book ai didi

database - 使用存储过程模拟 postgresql

转载 作者:IT王子 更新时间:2023-10-29 02:02:45 26 4
gpt4 key购买 nike

我一直在浏览 https://github.com/DATA-DOG/go-sqlmock 的测试文件弄清楚如何创建用于模拟目的的存储过程。我有:

_, err = db.Exec(`
CREATE OR REPLACE FUNCTION val() RETURNS INT AS
$$ SELECT 1; $$
LANGUAGE sql;
`)

if err != nil {
t.Fatal(err)
}

我得到:

all expectations were already fulfilled, call to exec 'CREATE OR REPLACE FUNCTION val() RETURNS INT AS $$ SELECT 1; $$ LANGUAGE sql;' query with args [] was not expected

相反,如果我尝试使用

        mock.ExpectExec(`
CREATE OR REPLACE FUNCTION val() RETURNS INT AS
$$ SELECT 1; $$
LANGUAGE sql;
`,
).WillReturnResult(sqlmock.NewResult(0, 0))

if err := mock.ExpectationsWereMet(); err != nil {
t.Fatal(err)
}

我得到:

there is a remaining expectation which was not matched: ExpectedExec => expecting Exec which:
- matches sql: 'CREATE OR REPLACE FUNCTION val() RETURNS INT AS $$ SELECT 1; $$ LANGUAGE sql;'
- is without arguments
- should return Result having:
LastInsertId: 0
RowsAffected: 0

我真的很困惑如何设置一个基本的存储过程。

最佳答案

sqlmock 库对此非常有效。

但请注意,ExpectExec 接收正则表达式以匹配:

// ExpectExec expects Exec() to be called with sql query
// which match sqlRegexStr given regexp.
// the *ExpectedExec allows to mock database response
ExpectExec(sqlRegexStr string) *ExpectedExec

您正在向该函数发送您期望接收的确切字符串,无需任何转义。

要转义字符串,添加:

import (
"regexp"
)

然后在添加期望时,转义您的字符串(注意 regexp.QuoteMeta):

mock.ExpectExec(regexp.QuoteMeta(`
CREATE OR REPLACE FUNCTION val() RETURNS INT AS
$$
SELECT 1;
$$
LANGUAGE sql;
`),
).WillReturnResult(sqlmock.NewResult(0, 0))

这样,转义的正则表达式将匹配您的 exec 命令。

关于database - 使用存储过程模拟 postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46311546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com