实际代码
var isRecordPresentQuery = `SELECT EXISTS
(SELECT 1
FROM public.records
WHERE "recordHash" = $1)`
var addRecordQuery = `INSERT INTO public.records
("fileId",
"recordHash"
)
VALUES(
$1, $2
)
RETURNING "recordId"`
hashKey := []string{
"c9d778419a8ce7",
"9881d3d5c5f089",
"b7c68a247ed250",
}
count := 0
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
pgxMock, err := pgxmock.NewPool()
if err != nil {
t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
}
defer pgxMock.Close()
for _, line := range tt.input.filelines {
if line[0] == byte('6') {
recordHash := string(hashKey[count])
pgxMock.ExpectQuery(regexp.QuoteMeta(isRecordPresentQuery)).WithArgs(
recordHash,
).WillReturnRows(pgxmock.NewRows([]string{"exists"}).AddRow(false))
pgxMock.ExpectBegin()
pgxMock.ExpectQuery(regexp.QuoteMeta(addRecordQuery)).WithArgs(
1,
recordHash[count]
).WillReturnRows(pgxmock.NewRows([]string{"recordId"}).AddRow(int64(1)))
pgxMock.ExpectCommit()
count++
}
}
pgxMock.ExpectBegin()
if tt.expectedError == nil {
err = Processor(context.Background(), tt.input.filelines, tt.input.fileid)
assert.Nil(t, err)
}
})
}
我尝试了硬编码值,如果我进行了硬编码哈希值,我不会看到任何问题,但是如果我使用数组,那么我会得到此错误
LETS查看您的使用方式。您唯一访问的是:
SO
recordHash := string(hashKey[count])
将包含一个哈希字符串(在第一次迭代中,这将是recordHash
)。然后使用:
c9d778419a8ce7
recordHash
将是字符pgxMock.ExpectQuery(regexp.QuoteMeta(addRecordQuery)).WithArgs(
1,
recordHash[count]
).WillReturnRows(pgxmock.NewRows([]string{"recordId"}).AddRow(int64(1)))
(ASCII 99)。在字符串上使用索引驱动将返回A
recordHash[count]
(单位8
的alias)。因此,错误是说您正在比较
c
/byte
99(byte
)与字符串unit8
(这将失败)。
我怀疑以下内容会按照您的期望工作:c