sqlmock이 쿼리와 일치하지 않지만 쿼리가 동일하고 로그 출력도 동일하게 표시됩니다.
테스트 작성 중 문제가 발생했습니다. 주로 업데이트 기능과 관련된 Gorm 및 sqlmock을 사용하는 코드입니다.
첫 번째 워크플로 섹션은 데이터베이스의 레코드만 쿼리합니다. 로그 출력에 동일하다고 표시되어 있어도 내 SQL과 일치하도록 할 수 없습니다.
오류 메시지는 다음과 같습니다.
(database.go:263) [2020-01-08 10:29:40] 查询:无法匹配实际 SQL:“SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1” with expected regexp "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1"
ExpExec를 사용하여 ExpectQuery를 삽입해 보았습니다.
for _, c := range cases { db, mock, err := sqlmock.New() if err != nil { t.Fatal(err) } DB, err := gorm.Open("sqlite3", db) if err != nil { t.Fatal(err) } DB.LogMode(true) mock.ExpectQuery(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`) err = UpdateStoragePool(DB, &c.givenPool) if !reflect.DeepEqual(c.wantedError, err) { t.Fatalf("expecting errror %q, got %q", c.wantedError, err) } // 如果事务期间没有发生任何错误,则检查是否满足所有预期 if c.wantedError == nil { if err := mock.ExpectationsWereMet(); err != nil { t.Fatalf(err.Error()) } } }
저도 시도해 보았습니다.
mock.ExpectQuery(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = '1')) ORDER BY "storage_pools"."id" ASC LIMIT 1`).WithArgs(1) mock.ExpectExec(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`) mock.ExpectExec(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = '1')) ORDER BY "storage_pools"."id" ASC LIMIT 1`).WithArgs(1)
이 문제에는 두 가지 이유가 있을 수 있습니다.
위 내용은 쿼리가 동일하고 로그에 동일한 것으로 표시되는데도 `sqlmock`이 쿼리와 일치하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!