Go에서는 구체적인 유형 내에 선언된 특정 함수를 모의하는 것이 불가능합니다. 그러나 테스트 가능성을 달성하기 위해 사용할 수 있는 몇 가지 옵션이 있습니다.
변수, 구조체 필드 또는 함수 매개변수로 존재하는 함수 값은 Go에서 모의할 수 있습니다. 다음을 고려하십시오.
var Fn = func() { ... } type S struct { Fn func() } func F(Fn func())
이러한 각 경우에 Fn은 모의 가능합니다.
인터페이스는 Go에서 효과적이고 선호되는 모의 수단을 제공합니다. 다음 예를 고려하십시오.
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) { q := "SELECT * FROM product WHERE id = ?" // ... } // Mock implementation type ProductRepositoryMock struct {} func (ProductRepositoryMock) GetProductById(DB *sql.DB, ID int) (p Product, err error) { // ... }
ProductRepository에 의존하는 코드는 일반적인 실행을 위해 ProductStore를 활용하고 테스트 목적으로 ProductRepositoryMock을 활용할 수 있습니다.
대부분을 유지하려면 모의를 활성화하는 동안 함수의 원래 구조를 유지하면서 함수에 전달될 유형의 메서드를 미러링하는 인터페이스를 만듭니다. 그런 다음 인터페이스의 모의 버전을 모두 구현하고 테스트 중에 활용합니다.
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) { ... }
이제 GetProductByName의 DB 매개변수를 모의할 수 있습니다.
위 내용은 효과적인 테스트를 위해 Go에서 모의 함수를 어떻게 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!