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

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

DDD
풀어 주다: 2024-12-20 17:52:10
원래의
641명이 탐색했습니다.

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

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