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

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

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

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

인터페이스가 없는 Go 테스트 사례에서 구조체의 모의 방법 호출

Go에는 Mockito 및 jMock과 같은 프레임워크와 직접적으로 동등한 것이 없습니다. 구조체의 메서드 호출을 조롱합니다. 그러나 소스 코드에 인터페이스를 도입하지 않고도 비슷한 수준의 모의를 달성하기 위해 사용할 수 있는 몇 가지 기술이 있습니다.

한 가지 접근 방식은 원본 구조체와 동일한 메서드를 구현하는 모의 구조체를 만드는 것입니다. 그런 다음 모의 구조체를 테스트해야 하는 함수나 메서드에 삽입하여 동작을 제어하고 호출을 확인할 수 있습니다.

다음 예를 고려하세요.

type A struct {}

func (a *A) perform(url string){
    // ...
} 

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

Perform의 메서드 호출을 모의하면 A와 동일한 인터페이스를 구현하는 모의 구조체 AMock을 생성할 수 있습니다.

type AMock struct {}

func (a *AMock) perform(url string) {
    // mocked implementation
}
로그인 후 복사

테스트 사례에서 호출 함수에 모의 구조체를 주입하고 예상되는 동작을 주장할 수 있습니다.

또 다른 접근 방식은 testify/mock과 같은 종속성 주입 프레임워크를 사용하는 것입니다. 이 프레임워크는 인터페이스를 모의하고 테스트 사례에서 사용법을 확인할 수 있는 확장 메서드 세트를 제공합니다.

import "github.com/stretchr/testify/mock"

type A struct {}

type AMock struct {
    mock.Mock
}

func (a *AMock) perform(url string){
    a.Called(url)
} 

func invoke(s *A, url string){
    // ...
} 
로그인 후 복사

testify/mock 프레임워크를 사용하면 쉽게 모의 인터페이스를 생성하고, 메서드 호출을 확인하고, 테스트 사례에 대한 기대치를 설정하세요.

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

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