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

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

Susan Sarandon
풀어 주다: 2024-12-09 18:57:26
원래의
373명이 탐색했습니다.

How to Mock Struct Method Calls in Go Tests Without Interfaces?

Go 테스트 케이스에서 구조체의 모의 방법 호출

문제:

모의 방법 소스에 인터페이스를 도입하지 않고 Go 테스트 케이스에서 구조체의 메서드 호출 코드?

코드 예:

type A struct {}

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

var s := A{}
func invoke(url string){
   out := s.perfom(url)
   ...
   ...
} 
로그인 후 복사

답변:

구조체의 메서드 호출을 모의하려면, 접근 방식은 Mock 객체를 사용하는 것입니다.

Mock을 사용한 솔루션 객체:

  1. 모의할 메소드를 정의하는 Performer 인터페이스를 생성합니다.
  2. Performer 인터페이스의 실제 구현 A를 생성합니다.
  3. Performer 인터페이스의 모의 구현 AMock.
  4. 테스트의 호출 함수에 모의 구현을 전달합니다. case.

예제 코드:

type Performer interface {
    perform()
}

type A struct {}

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

type AMock struct {}

func (a *AMock) perform () {
    fmt.Println("mocked method")
}

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

테스트 사례에서 모의 ​​구현을 호출 함수에 삽입합니다.

func TestCallerMock(t *testing.T) {
    mock := &AMock{}
    caller(mock)
}
로그인 후 복사

실제 코드에서는 호출 함수에 실제 구현을 삽입합니다.

func RealInvoke(url string) {
    a := &A{}
    out := a.perform(url)
}
로그인 후 복사

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

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