sqlmock을 사용하여 Gorm 함수에 대한 테스트를 작성하려고 하면 로그 출력에 동일한 쿼리가 표시되더라도 sqlmock이 SQL 쿼리와 일치하지 못하는 문제가 발생할 수 있습니다. 이러한 불일치는 ExpectQuery 메서드를 사용할 때 발생할 수 있습니다.
이 문제를 해결하려면 쿼리를 ExpectQuery 메서드에 전달하기 전에 regexp.QuoteMeta()를 사용하여 쿼리를 이스케이프하는 것이 좋습니다. 이 함수는 불일치의 원인이 될 수 있는 특수 문자를 적절하게 이스케이프합니다. 업데이트된 코드는 다음과 같습니다.
mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`))
sqlmock이 SELECT 문과 일치하지 않는 또 다른 문제가 발생할 수도 있습니다. 이는 Gorm이 어떤 이유로 여러 SELECT 문을 수행하기 때문입니다. 첫 번째 문은 행을 찾지만 두 번째 문은 찾지 않습니다.
이 문제를 해결하려면 ExpectQuery와 함께 QueryMatcherOption(sqlmock.QueryMatcherEqual)을 사용하여 sqlmock이 해당 행 대신 정확한 문자열 일치를 사용하도록 할 수 있습니다. 기본 퍼지 일치 알고리즘.
db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) if err != nil { t.Fatal(err) }
위 내용은 동일한 입력 및 로그 출력에도 불구하고 내 Sqlmock이 내 쿼리와 일치하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!