>백엔드 개발 >Golang >내 Google App Engine 데이터 저장소 쿼리가 테스트에서 새로 추가된 항목을 검색하지 못하는 이유는 무엇입니까?

내 Google App Engine 데이터 저장소 쿼리가 테스트에서 새로 추가된 항목을 검색하지 못하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-06 13:20:11674검색

Why Do My Google App Engine Datastore Queries Fail to Retrieve Newly Added Entities in Tests?

Google App Engine 데이터 저장소 - 영구 쿼리

테스트 중에 쿼리를 통해 Google App Engine 데이터 저장소의 데이터에 액세스하는 것은 어려울 수 있습니다. 애플리케이션의 성공적인 기능에도 불구하고 테스트는 예상한 데이터를 검색하지 못하는 경우가 많습니다.

이러한 불일치의 잠재적인 이유 중 하나는 데이터 저장소 쿼리의 일관성이 지연되기 때문입니다. 상위 쿼리와 달리 대부분의 쿼리는 새로 추가된 엔터티를 반영하는 데 어느 정도 시간이 필요합니다. "보류 중인 모든 트랜잭션 적용 및 데이터 저장소 저장" 줄은 엔터티가 추가되고 쿼리된 후 테스트 프레임워크가 대기 중인 트랜잭션을 적용하고 있음을 나타냅니다.

따라서 엔터티 생성 직후 실행되는 쿼리는 이러한 트랜잭션을 캡처하지 못할 수 있습니다. 변경사항이 보류 중입니다. 이 문제를 해결하려면 다음과 같은 몇 가지 옵션이 있습니다.

  • 지연 도입: 일관성을 위해 데이터 생성과 후속 쿼리 사이에 짧은 지연(예: 100ms)을 도입합니다.
  • 강력하게 일관된 데이터 저장소 사용: Strongly ConsistentDatastore를 활성화합니다. 즉각적인 데이터 일관성을 강제하도록 테스트 구성 중 옵션을 사용합니다.

다음은 지연 접근 방식을 사용하여 테스트 코드의 수정된 버전입니다.

type Entity struct {
    Value string
}

func TestEntityQuery(t *testing.T) {
    c, err := aetest.NewContext(nil)
    if err != nil {
        t.Fatal(err)
    }
    defer c.Close()

    key := datastore.NewIncompleteKey(c, "Entity", nil)
    key, err = datastore.Put(c, key, &Entity{Value: "test"})
    if err != nil {
        t.Fatal(err)
    }

    // Delay to allow for consistency
    time.Sleep(100 * time.Millisecond)

    q := datastore.NewQuery("Entity").Filter("Value =", "test")
    var entities []Entity
    keys, err := q.GetAll(c, &entities)
    if err != nil {
        t.Fatal(err)
    }
    if len(keys) == 0 {
        t.Error("No keys found in query")
    }
    if len(entities) == 0 {
        t.Error("No entities found in query")
    }
}

이러한 조치를 통합함으로써 테스트는 정확하게 데이터 저장소 쿼리의 동작을 반영하고 중복 항목이 실수로 생성되지 않도록 합니다.

위 내용은 내 Google App Engine 데이터 저장소 쿼리가 테스트에서 새로 추가된 항목을 검색하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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