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

인터페이스 없이 Go 테스트 케이스에서 구조체 메서드를 모의하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-20 17:52:10728검색

How to Mock Struct Methods in Go Test Cases Without Interfaces?

Go 테스트 케이스의 모의 구조체 메서드

Go에서는 소스 코드에 인터페이스를 도입하지 않고도 구조체의 모의 메서드 호출을 달성할 수 있습니다. . 방법은 다음과 같습니다.

샘플 구조체 및 메서드 모의

다음 구조체 및 메서드를 고려하세요.

type A struct {}

func (a *A) perfom(string){
...
...
..
}

테스트 사례에서 모의

테스트를 위해 수행 방법을 모의하려면 사례:

  1. 모의 인터페이스 만들기: 모의할 메서드를 나타내는 인터페이스를 정의합니다.
type Performer interface {
    perform(string)
}
  1. 모의 및 실제 구현 만들기: 모의 및 실제 구현을 위한 인터페이스를 구현합니다. struct.
type AMock struct {}

func (a *AMock) perform(string) {
    // Mocked behavior
}

type A struct {}

func (a *A) perform(string) {
    // Real implementation
}
  1. 종속성 주입 사용: 모의 또는 실제 구현을 테스트 중인 함수에 대한 인수로 전달합니다.
func invoke(url string, p Performer) {
    out := p.perfom(url)
    ...
    ...
}
  1. 테스트에 Mock 삽입: 테스트 사례에서는 호출 함수에 모의 구현을 삽입합니다.
func TestInvokeWithMock(t *testing.T) {
    var amok = &AMock{}
    invoke("url", amok)
    // Verify mock behavior (e.g., assert it was called with the correct argument)
}
  1. 프로덕션 코드에 실제 구현 삽입: 프로덕션 코드에 다음의 실제 구현을 삽입합니다. 호출 함수에 구조체를 추가합니다.
func TestInvokeWithReal(t *testing.T) {
    var a = &A{}
    invoke("url", a)
    // No need for verification since it's the real implementation
}

기타 옵션

[testify/mock](https://godoc.org/github.com/stretchr/testify/mock)과 같은 라이브러리는 더욱 강력한 모의 기능을 제공하여 모의 동작을 제어하고 메소드 호출을 확인하세요.

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

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