"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GoMock 소개: Go에서 조롱하기

GoMock 소개: Go에서 조롱하기

2024-09-02에 게시됨
검색:253

An Introduction to GoMock: Mocking in Go
소프트웨어 개발에서 테스트는 코드의 품질과 안정성을 보장하는 중요한 측면입니다. 그러나 테스트를 작성할 때 종속성의 영향을 받지 않고 구성 요소를 독립적으로 테스트해야 하는 상황에 자주 직면하게 됩니다. 여기서 조롱이 시작되며 Go 개발자에게 GoMock은 이러한 목적으로 가장 널리 사용되는 프레임워크 중 하나입니다.
이 기사에서는 Go(Golang)를 위한 강력한 모의 프레임워크인 GoMock을 살펴보고 이를 테스트 전략에 효과적으로 사용하는 방법을 보여줍니다.

GoMock이 무엇인가요?
GoMock은 개발자가 테스트를 위해 모의 개체를 만들 수 있는 Go용 모의 프레임워크입니다. 이러한 모의 개체는 실제 개체의 시뮬레이션된 버전이므로 종속성을 모의 구현으로 대체하여 코드를 별도로 테스트할 수 있습니다. 이는 실제 외부 시스템이나 종속성에 의존하지 않고 구성 요소 간의 복잡한 상호 작용을 테스트하는 데 특히 유용합니다.

왜 GoMock을 사용하나요?
조롱은 여러 가지 이유로 필수적입니다:

  1. 격리: 종속성을 모의하면 종속성의 동작에 영향을 받지 않고 특정 구성 요소의 기능을 테스트하는 데 집중할 수 있습니다.
  2. 속도: 모의 테스트는 실제 데이터베이스 연결, 네트워크 호출 또는 기타 시간이 많이 걸리는 작업을 포함하지 않기 때문에 일반적으로 더 빠르게 실행됩니다.
  3. 제어: 모의 객체를 사용하면 종속성 동작을 완전히 제어할 수 있으므로 엣지 케이스를 포함한 다양한 시나리오를 시뮬레이션할 수 있습니다.
  4. 반복성: 모의는 외부 조건이 변경되더라도 테스트가 반복 가능하고 일관된 결과를 생성하도록 보장합니다. GoMock은 Go에서 모의 ​​구현을 위한 강력한 솔루션을 제공하므로 코드를 더 쉽게 효과적으로 테스트할 수 있습니다.

GoMock 시작하기

  1. GoMock 설치 GoMock을 시작하려면 인터페이스에 대한 모의 구현을 생성하는 GoMock 패키지와 mockgen 도구를 설치해야 합니다. Go 모듈을 사용하여 이 작업을 수행할 수 있습니다. 가서 github.com/golang/mock/gomock을 받으세요 github.com/golang/mock/mockgen@latest
  2. 를 설치해 보세요.
  3. mockgen으로 모의 생성 mockgen 도구는 인터페이스에 대한 모의 구현을 생성하는 데 사용됩니다. 모의하려는 패키지 DB에 인터페이스 데이터베이스가 있다고 가정해 보겠습니다. 다음과 같이 모의를 생성합니다. mockgen -source=db.go -destination=mocks/mock_db.go -package=mocks 이 명령은 테스트에서 사용할 수 있는 mocks 패키지에 데이터베이스 인터페이스의 모의 구현을 생성합니다.
  4. GoMock으로 테스트 작성 모의 객체를 생성한 후에는 테스트 사례에서 사용할 수 있습니다. 예는 다음과 같습니다. 패키지 mypackage

가져오기(
"테스트"
"github.com/golang/mock/gomock"
"mypackage/mocks" // 생성된 모의 객체가 포함된 패키지 가져오기
)

func TestMyFunction(t *testing.T) {
// 새로운 Gomock 컨트롤러 생성
ctrl := gomock.NewController(t)
ctrl.Finish()

연기
// Create a mock instance of the Database interface
mockDB := mocks.NewMockDatabase(ctrl)

// Set up expectations on the mock
mockDB.EXPECT().GetData("key").Return("value", nil)

// Call the function under test, using the mock as a dependency
result, err := MyFunction(mockDB, "key")

// Assert the results
if err != nil {
    t.Fatalf("expected no error, got %v", err)
}
if result != "value" {
    t.Fatalf("expected 'value', got %v", result)
}

}
이 예에서 MyFunction은 테스트 중인 함수이며 Database 인터페이스에 의존합니다. 모의 개체 mockDB는 테스트 중에 실제 데이터베이스의 동작을 시뮬레이션하는 데 사용되어 테스트가 MyFunction 내의 논리에만 집중되도록 합니다.

  1. GoMock으로 기대치 설정 GoMock의 주요 기능 중 하나는 메서드 호출에 대한 기대치를 설정하는 기능입니다. 메서드를 호출해야 하는 횟수, 인수, 반환할 내용을 지정할 수 있습니다. 이는 코드가 예상대로 종속성과 상호 작용하는지 확인하는 데 도움이 됩니다. 예를 들어: mockDB.EXPECT().GetData("키").Times(1).Return("값", nil) 이 예상은 GetData 메서드가 "key" 인수를 사용하여 정확히 한 번 호출되어야 하며 "value"와 nil을 오류로 반환해야 함을 지정합니다.

GoMock 사용 모범 사례
GoMock을 최대한 활용하려면 다음 모범 사례를 고려하세요.

  1. 테스트에 집중하세요: GoMock을 사용하여 종속성 동작을 테스트하는 대신 테스트 중인 구성 요소를 격리하고 해당 논리에 집중하세요.
  2. 과도한 모의 방지: 모의는 강력하지만, 너무 많은 종속성을 모의하려는 유혹을 피하십시오. 유지 관리가 어려운 취약한 테스트로 이어질 수 있습니다.
  3. 명확한 기대: 테스트가 신뢰할 수 있고 이해하기 쉽도록 모의 테스트에 대한 기대를 명시적으로 설명하세요.
  4. gomock.InOrder 활용: 필요한 경우 gomock.InOrder를 사용하여 메서드 호출 순서를 적용하여 모의 개체가 예상 순서대로 사용되도록 합니다.

결론
GoMock은 Go 개발자를 위한 귀중한 도구로, 종속성을 모의하여 강력하고 격리된 단위 테스트를 생성할 수 있는 기능을 제공합니다. GoMock을 효과적으로 사용하면 테스트가 안정적이고 반복 가능하며 테스트 중인 코드의 논리에 초점을 맞추도록 할 수 있습니다. 복잡한 상호 작용을 테스트하든 단순히 외부 시스템에서 코드를 격리하든 GoMock은 고품질 테스트 적용 범위를 유지하는 데 필요한 유연성과 제어 기능을 제공합니다.
GoMock을 테스트 전략에 통합하면 테스트 효과를 향상시켜 보다 안정적이고 유지 관리가 쉬운 Go 애플리케이션을 만들 수 있습니다.

릴리스 선언문 이 글은 https://dev.to/keploy/an-introduction-to-gomock-mocking-in-go-2ljd?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3