> 백엔드 개발 > Golang > 테스트 및 벤치마킹을 위해 Go에서 원숭이 패치 효과를 어떻게 얻을 수 있나요?

테스트 및 벤치마킹을 위해 Go에서 원숭이 패치 효과를 어떻게 얻을 수 있나요?

Linda Hamilton
풀어 주다: 2024-12-11 12:26:11
원래의
725명이 탐색했습니다.

How Can I Achieve the Effect of Monkey Patching in Go for Testing and Benchmarking?

Go의 원숭이 패치

Go 프로그래밍 언어에서 인터페이스를 중심으로 구조화되지 않은 코드를 처리할 때 모킹이 어려울 수 있습니다. 구조체가 직접 상호 연결되어 있고 종속성 주입이 없으면 기본 코드를 수정하지 않고 효과적으로 테스트하고 벤치마킹하는 능력이 방해를 받습니다.

Python과 같은 스크립팅 언어에서 떠올릴 수 있는 기술 중 하나는 원숭이 패치입니다. 객체는 런타임에 수정될 수 있습니다. Go에는 객체를 직접 수정하기 위한 동등한 메커니즘이 없지만 유사한 결과를 얻기 위한 대체 접근 방식이 있습니다.

일반적인 전략 중 하나는 모의하려는 구조체 주위의 래퍼로 고유한 인터페이스를 만드는 것입니다. 이를 통해 기본 구조체의 원래 기능을 유지하면서 인터페이스 메서드에서 원하는 동작을 구현할 수 있습니다. 예를 들면 다음과 같습니다.

type MyInterface interface {
    DoSomething(i int) error
    DoSomethingElse() ([]int, error)
}

type Concrete struct {
    client *somepackage.Client
}

func (c *Concrete) DoSomething(i int) error {
    return c.client.DoSomething(i)
}

func (c *Concrete) DoSomethingElse() ([]int, error) {
    return c.client.DoSomethingElse()
}
로그인 후 복사

MyInterface를 구현하면 이제 테스트를 위한 모의 구현을 생성할 수 있습니다.

// MockMyInterface implements MyInterface for testing purposes
type MockMyInterface struct {
    mockedDoSomethingError error
    mockedDoSomethingElseResult []int
}

func (m *MockMyInterface) DoSomething(i int) error {
    return m.mockedDoSomethingError
}

func (m *MockMyInterface) DoSomethingElse() ([]int, error) {
    return m.mockedDoSomethingElseResult, nil
}
로그인 후 복사

댓글에서 @elithrar가 제안한 또 다른 접근 방식은 자신의 구조체 내에서 모의하려는 유형입니다. 이를 통해 필요한 메서드만 선택적으로 모의할 수 있습니다.

type Concrete struct {
    *somepackage.Client
}
로그인 후 복사

클라이언트를 내장하면 DoSomethingNotNeedingMocking과 같은 메서드를 인터페이스에 추가하거나 모의 개체를 만들지 않고도 직접 호출할 수 있습니다.

이러한 기술은 인터페이스를 중심으로 구성되지 않은 코드 테스트 및 벤치마킹을 위한 Monkey 패치에 대한 실행 가능한 대안을 제공합니다.

위 내용은 테스트 및 벤치마킹을 위해 Go에서 원숭이 패치 효과를 어떻게 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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