>  기사  >  백엔드 개발  >  동일한 입력 및 로그 출력에도 불구하고 내 Sqlmock이 내 쿼리와 일치하지 않는 이유는 무엇입니까?

동일한 입력 및 로그 출력에도 불구하고 내 Sqlmock이 내 쿼리와 일치하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-11 00:57:03781검색

Why Is My Sqlmock Not Matching My Query Despite Identical Input and Log Output?

동일한 입력 및 로그 출력에도 불구하고 Sqlmock이 쿼리와 일치하지 않음

쿼리 불일치 문제

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.