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

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

DDD
DDD원래의
2024-12-13 13:13:09114검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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