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

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

Linda Hamilton
Linda Hamilton원래의
2024-11-12 16:59:02261검색

Why is Sqlmock Failing to Match My Query Despite Identical Output in the Log?

로그 출력의 ID에도 불구하고 Sqlmock이 쿼리와 일치하지 않음

오류 메시지

sqlmock을 사용하여 Gorm 테스트에서 쿼리를 일치시키려고 하면 다음이 발생합니다. 오류가 발생했습니다:

(path/to/my/project/database.go:263)
[2020-01-08 10:29:40]  Query: could not match actual 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"

해결 방법

이 문제는 sqlmock 쿼리 일치자로 regexp를 사용하는 데서 발생합니다. 기본적으로 sqlmock은 실제 쿼리와 예상 패턴 간의 정확한 일치가 필요한 엄격한 일치 쿼리 일치자를 사용합니다.

이 문제를 해결하려면 QueryMatcherEqual 옵션을 사용하여 기본 쿼리 일치자를 바꾸세요.

QueryMatcherOption(sqlmock.QueryMatcherEqual)

추가 고려 사항

  • sqlmock 쿼리가 이스케이프해야 할 수 있는 특수 문자를 포함하여 실제 쿼리 문자열과 일치하는지 확인하세요.
  • 쿼리에 리터럴 값이 포함된 경우 , WithArgs()를 사용하여 인수를 지정하고 필요에 따라 이스케이프 처리합니다.
  • 쿼리에 함수나 복잡한 조건이 포함된 경우 regexp.QuoteMeta()를 사용하여 이를 sqlmock이 일치할 수 있는 정규식으로 변환합니다.

위 내용은 로그의 동일한 출력에도 불구하고 Sqlmock이 내 쿼리와 일치하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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