Golang의 모의 함수
Golang에서는 구체적인 유형에 선언된 모의 함수를 직접 지원하지 않습니다. 그러나 유사한 기능을 달성하기 위한 몇 가지 전략이 있습니다.
함수 값
변수, 구조체 필드 또는 매개변수를 포함한 함수 값은 모킹될 수 있습니다. 다음을 고려하십시오.
var Fn = func() { ... } type S struct { Fn func() } func F(Fn func())
이러한 모든 인스턴스에서 Fn은 모의가 가능합니다.
인터페이스
모의 인터페이스가 선호되는 옵션입니다. 대상 함수의 메서드를 나타내는 인터페이스를 만듭니다.
type ProductRepository interface { GetProductById(DB *sql.DB, ID int) (p Product, err error) }
이 인터페이스의 실제 버전과 모의 버전을 구현합니다.
// Real implementation type ProductStore struct{} func (ProductStore) GetProductById(DB *sql.DB, ID int) (p Product, err error) { // ... } // Mock implementation type ProductRepositoryMock struct {} func (ProductRepositoryMock) GetProductById(DB *sql.DB, ID int) (p Product, err error) { // ... }
이제 ProductRepository에 의존하는 코드를 전달할 수 있습니다. 실제 구현은 프로덕션용이고, 모의 구현은 테스트용입니다.
인터페이스 모방
또는 *sql.DB의 메소드를 모방하는 인터페이스를 정의한 다음 해당 인터페이스 유형을 함수의 매개변수 유형으로 사용하십시오.
type DBIface interface { Query(query string, args ...interface{}) (*sql.Rows, error) // ... } type DBMock struct {} func (DBMock) Query(query string, args ...interface{}) (*sql.Rows, error) { // ... } func GetProductByName(DB DBIface, name string) (p Product, err error) { // ... }
이렇게 하면 DB 매개변수를 조롱할 수 있습니다.
위 내용은 Golang에서 어떻게 효과적으로 모의 함수를 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!