>백엔드 개발 >Golang >Golang에서 Testify 및 GQLgen을 사용하여 GraphQL 쿼리 및 돌연변이를 효과적으로 테스트하는 방법은 무엇입니까?

Golang에서 Testify 및 GQLgen을 사용하여 GraphQL 쿼리 및 돌연변이를 효과적으로 테스트하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-26 12:26:02349검색

How to Effectively Test GraphQL Queries and Mutations with Testify and GQLgen in Golang?

Golang에서 GraphQL 단위 테스트

Golang 애플리케이션에서 GraphQL 쿼리 및 변형을 테스트할 때는 애플리케이션의 기능과 안정성을 보장하기 위한 강력한 테스트 전략을 갖추는 것이 중요합니다. API 엔드포인트.

Golang 테스트 프레임워크의 미로 안에 자리잡은 testify는 단순성과 포괄성으로 인해 최고의 선택으로 자리잡고 있습니다. GraphQL 테스트에 귀중한 지원을 제공하는 gqlgen/client 패키지와 결합하면 효과적인 단위 테스트의 보람 있는 영역을 탐구할 수 있습니다.

GraphQL 쿼리 및 변형 테스트 프로세스를 조명하는 실제 사례를 시작해 보겠습니다. :

<code class="go">// graph/resolver/root.resolver_test.go

import (
    "context"
    "testing"

    "github.com/99designs/gqlgen/client"
    "github.com/99designs/gqlgen/graphql/handler"
    "github.com/mrdulin/gqlgen-cnode/graph/generated"
    "github.com/mrdulin/gqlgen-cnode/graph/model"
    "github.com/mrdulin/gqlgen-cnode/mocks"
    "github.com/stretchr/testify/mock"
    "github.com/stretchr/testify/require"
)

...

type MockedUserService struct {
    mock.Mock
}

func (s *MockedUserService) GetUserByLoginname(loginname string) *model.UserDetail {
    args := s.Called(loginname)
    return args.Get(0).(*model.UserDetail)
}

func (s *MockedUserService) ValidateAccessToken(accesstoken string) *model.UserEntity {
    args := s.Called(accesstoken)
    return args.Get(0).(*model.UserEntity)
}
...</code>

이러한 모의 객체를 활용하여 GraphQL 해석기의 기능을 검증하는 포괄적인 단위 테스트를 진행할 수 있습니다.

<code class="go">// graph/resolver/root.resolver_test.go

...

// TestMutationResolver_ValidateAccessToken is a test example for the ValidateAccessToken mutation.
func TestMutationResolver_ValidateAccessToken(t *testing.T) {

    t.Run("should validate accesstoken correctly", func(t *testing.T) {
        // Create a mocked user service
        mockedUserService := new(mocks.MockedUserService)

        // Inject the mocked service into our resolver
        resolvers := resolver.Resolver{UserService: mockedUserService}

        // Create a GraphQL client
        c := client.New(handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &resolvers})))

        // Set up expected return values from the mock service
        ue := model.UserEntity{ID: "123", User: model.User{Loginname: &loginname, AvatarURL: &avatarURL}}
        mockedUserService.On("ValidateAccessToken", mock.AnythingOfType("string")).Return(&ue)

        // Run the GraphQL mutation query
        var resp struct {
            ValidateAccessToken struct{ ID, Loginname, AvatarUrl string }
        }
        q := `
      mutation { 
        validateAccessToken(accesstoken: "abc") { 
          id, 
          loginname, 
          avatarUrl 
        } 
      }
    `
        c.MustPost(q, &resp)

        // Assert that the mock service was called as expected
        mockedUserService.AssertExpectations(t)

        // Check the response from the GraphQL mutation
        require.Equal(t, "123", resp.ValidateAccessToken.ID)
        require.Equal(t, "mrdulin", resp.ValidateAccessToken.Loginname)
        require.Equal(t, "avatar.jpg", resp.ValidateAccessToken.AvatarUrl)
    })

}
...</code>

이 테스트 접근 방식을 구현하면 다음을 효과적으로 수행할 수 있습니다. GraphQL 리졸버를 면밀히 조사하고 애플리케이션에 품질과 안정성이라는 견고한 기반을 마련하세요.

위 내용은 Golang에서 Testify 및 GQLgen을 사용하여 GraphQL 쿼리 및 돌연변이를 효과적으로 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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