> 백엔드 개발 > Golang > 인터페이스 없이 Go에서 구조체 메소드 호출을 모의하는 방법은 무엇입니까?

인터페이스 없이 Go에서 구조체 메소드 호출을 모의하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-13 13:13:09
원래의
117명이 탐색했습니다.

How to Mock Struct Method Calls in Go without Interfaces?

Go에서 구조체 메서드 호출 모의

Go에서 인터페이스를 도입하지 않고 구조체의 메서드 호출을 모의하는 것은 다음과 같은 기술을 통해 달성할 수 있습니다. "이중" 패턴. 구현 방법은 다음과 같습니다.

1. 수행자 인터페이스 생성:

모의하려는 메서드를 캡슐화하는 인터페이스를 정의합니다.

type Performer interface {
    perform()
}
로그인 후 복사

2. Mock 및 실제 구현으로 인터페이스 구현:

두 개의 구조체를 생성합니다. 하나는 실제 구현(A)용이고 다른 하나는 Performer 인터페이스를 구현하는 모의 구조체(AMock)용입니다.

type A struct{}

func (a *A) perform() {
    fmt.Println("real method")
}

type AMock struct{}

func (a *AMock) perform() {
    fmt.Println("mocked method")
}
로그인 후 복사

3. 종속성 주입 사용:

invoke() 함수에서 전역 변수에 직접 액세스하는 대신 종속성 주입을 사용하여 Performer 인터페이스를 전달합니다.

func invoke(p Performer) {
    p.perform()
}
로그인 후 복사

4 . 테스트에 모의 객체 삽입:

테스트 사례에서 AMock 인스턴스를 호출() 함수에 삽입합니다. 이를 통해 모의 메서드의 동작을 시뮬레이션할 수 있습니다.

// Create a mock performer
m := &AMock{}

// Inject the mock into invoke
invoke(m)
로그인 후 복사

5. 모의 호출 확인(선택 사항):

testify/mock과 같은 모의 라이브러리를 사용하는 경우 모의 메서드가 예상 인수 및 빈도로 호출되었는지 추가로 확인할 수 있습니다.

// Assert that the mocked method was called
mock.AssertCalled(t, "perform", "argument1", "argument2")
로그인 후 복사

이중 패턴을 활용하면 Go에서 구조체의 메서드 호출을 효과적으로 모의할 수 있어 철저한 테스트에 필요한 유연성과 격리성을 제공할 수 있습니다.

위 내용은 인터페이스 없이 Go에서 구조체 메소드 호출을 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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