>백엔드 개발 >Golang >동일한 텍스트에도 불구하고 sqlmock이 내 쿼리와 일치하지 못하는 이유는 무엇입니까?

동일한 텍스트에도 불구하고 sqlmock이 내 쿼리와 일치하지 못하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-10 19:00:04663검색

Why Is sqlmock Failing to Match My Query Despite Identical Text?

동일한 텍스트에도 불구하고 sqlmock이 쿼리와 일치하지 않음

다음과 같은 sqlmock을 사용하는 동안

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"

오류 메시지가 나타납니다. Gorm은 실망스러울 수 있습니다. 동일한 쿼리를 표시하는 로그 출력에도 불구하고 일치가 실패합니다.

여기서 근본적인 문제는 SQL 텍스트와 SQL 구문의 차이입니다. 쿼리 텍스트가 동일하게 나타날 수 있지만 구문이 약간만 변형되면 문제가 발생할 수 있습니다. 이 문제를 해결하려면 모의 쿼리 문자열이 실행 중인 쿼리의 리터럴 텍스트와 일치하는지 확인하세요.

가능한 해결책 중 하나는 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`))

쿼리 텍스트를 리터럴 따옴표로 묶어서 regexp.QuoteMeta()는 특수 문자 또는 문자열 내의 메타 문자는 문자 그대로 처리되어 일치 프로세스를 방해하지 않습니다. 이렇게 하면 문제가 해결되고 sqlmock이 쿼리와 올바르게 일치할 수 있습니다.

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

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