> 백엔드 개발 > Golang > Golang에서 어떻게 효과적으로 모의 함수를 만들 수 있나요?

Golang에서 어떻게 효과적으로 모의 함수를 만들 수 있나요?

Linda Hamilton
풀어 주다: 2024-12-07 07:51:17
원래의
545명이 탐색했습니다.

How Can I Effectively Mock Functions in Golang?

Golang의 모의 함수

Golang에서는 구체적인 유형에 선언된 모의 함수를 직접 지원하지 않습니다. 그러나 유사한 기능을 달성하기 위한 몇 가지 전략이 있습니다.

함수 값

변수, 구조체 필드 또는 매개변수를 포함한 함수 값은 모킹될 수 있습니다. 다음을 고려하십시오.

var Fn = func() { ... }

type S struct {
    Fn func()
}

func F(Fn func())
로그인 후 복사

이러한 모든 인스턴스에서 Fn은 모의가 가능합니다.

인터페이스

모의 인터페이스가 선호되는 옵션입니다. 대상 함수의 메서드를 나타내는 인터페이스를 만듭니다.

type ProductRepository interface {
    GetProductById(DB *sql.DB, ID int) (p Product, err error)
}
로그인 후 복사

이 인터페이스의 실제 버전과 모의 버전을 구현합니다.

// Real implementation
type ProductStore struct{}

func (ProductStore) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    // ...
}

// Mock implementation
type ProductRepositoryMock struct {}

func (ProductRepositoryMock) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    // ...
}
로그인 후 복사

이제 ProductRepository에 의존하는 코드를 전달할 수 있습니다. 실제 구현은 프로덕션용이고, 모의 구현은 테스트용입니다.

인터페이스 모방

또는 *sql.DB의 메소드를 모방하는 인터페이스를 정의한 다음 해당 인터페이스 유형을 함수의 매개변수 유형으로 사용하십시오.

type DBIface interface {
    Query(query string, args ...interface{}) (*sql.Rows, error)
    // ...
}

type DBMock struct {}

func (DBMock) Query(query string, args ...interface{}) (*sql.Rows, error) {
    // ...
}

func GetProductByName(DB DBIface, name string) (p Product, err error) {
    // ...
}
로그인 후 복사

이렇게 하면 DB 매개변수를 조롱할 수 있습니다.

위 내용은 Golang에서 어떻게 효과적으로 모의 함수를 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿