> 백엔드 개발 > Golang > 이동 중에 테스트를 위해 모의 개체와 스터브를 작성하려면 어떻게합니까?

이동 중에 테스트를 위해 모의 개체와 스터브를 작성하려면 어떻게합니까?

Johnathan Smith
풀어 주다: 2025-03-10 17:38:17
원래의
467명이 탐색했습니다.

GO에서 테스트를위한 모의 개체 및 스터브를 작성하는 방법?

GO에는 다른 언어 (예 : Java 용 Mockito)와 같은 내장 조롱 프레임 워크가 없습니다. 그러나 인터페이스와 스트러크를 사용하여 모의와 스터브를 효과적으로 만들 수 있습니다. 키는 코드가 상호 작용하는 종속성을 나타내는 인터페이스를 정의하는 것입니다. 그런 다음 실제 코드에 대한 구체적인 구현 및 테스트를위한 별도의 모의 구현을 만듭니다.

예를 들어 설명하자면 : 데이터베이스와 상호 작용하는 함수가 있다고 상상해 보겠습니다 :

 <code class="go"> 유형 데이터베이스 인터페이스 {getData (id int) (문자열, 오류) {realdatabase struct {// realaBase struct {intaBase intliat} intaBase struct} *realDatabase (id int) (id int) (string, error) {// ... 실제 데이터베이스 상호 작용 ... "데이터베이스"에서 데이터를 꺼내기 & quot; nil} func processData (db database, id int) (string, error) {data, err : nil {retud} / quot; & quot; 데이터, nil} </code> 
로그인 후 복사

이제 모의를 만들어 봅시다 :

 <pre class="brush:php;toolbar:false"> <code class="go"> mockdatabase struct {getDatafunc func (int) (string, error)} func (m *mockdatabase) getData (id int) (String, error) {if m.getafunc! = niL {iD). } return & quot;, nil // 또는 기본값/error} </code> 
로그인 후 복사

테스트에서 mockdatabase 를 사용하여 getData 의 반환 값을 제어하여 getData = "go"> funccdb : = {mockdb : =. & amp; mockdatabase {getDatafunc : func (id int) (string, error) {if id == 1 {return & quot; test data & quot; nil} return & quot;, errors.new ( "데이터를 찾지 못한다}}}, err : = erver (mockdb, 1)는 Assert.noerer (t, error (t,) & quot; processed : test data & quot;, 결과) 결과, err = processData (mockdb, 2) assert.error (t, err)}

이 예제는 간단한 모의를 보여줍니다. 스텁은 훨씬 간단합니다. 그들은 일반적으로 모의 함수 내에서 복잡한 논리없이 사전 정의 된 값을 반환합니다.

Go 단위 테스트에서 모의 ​​개체를 사용하는 모범 사례는 무엇입니까?

  • 조롱을 작고 집중적으로 유지하십시오. 각 모의는 단일 의존성의 필요한 동작 만 조롱해야합니다. 너무 많은 기능을 모방하는 지나치게 복잡한 조롱을 피하십시오.
  • 인터페이스를 지속적으로 사용하십시오 : 인터페이스는 효과적인 조롱에 중요합니다. 코드가 콘크리트 유형이 아닌 인터페이스를 통해 의존성과 상호 작용하도록하십시오.
  • 테스트 중심 개발 (TDD) : 테스트 작성 이전 실제 코드는보다 테스트 가능한 방식으로 코드를 설계하여 조롱을 더 쉽게 만들도록 권장합니다. (예 : mockdatabase , mockgetData ). 여러 계층의 종속성을 조롱하는 것을 발견하면 설계 결함이 나타날 수 있습니다. 더 나은 테스트 가능성을 위해 코드를 리팩토링하는 것을 고려하십시오.
  • 어설 션 라이브러리 사용 : 증언/assert 테스트에서 어설 션 작성을 훨씬 깨끗하고 읽기 쉬운 것입니다.

모의를 고립하는 동안 코드의 단위를 효과적으로 분리 할 수 ​​있습니까?

GO 테스트 중 코드 단위. 실제 종속성을 모의로 바꾸면 테스트 결과에 영향을 줄 수있는 외부 요인을 제거합니다. 이를 통해 테스트가 테스트중인 장치의 동작에만 초점을 맞추게됩니다.

위의 processData 예제에서, Mock mockdatabase 분리 된 processData 는 실제 데이터베이스입니다. 테스트는 데이터베이스의 상태 또는 가용성에 관계없이 processData 의 동작을 확인할 수 있습니다. 이 격리는 신뢰할 수 있고 반복 가능한 단위 테스트를 작성하는 데 중요합니다.

테스트 용 모의 생성을 단순화하는 인기있는 GO 라이브러리가 있습니까?

전용 조롱 프레임 워크를 제공하지는 않지만, 여러 제 3 자 라이브러리는 프로세스를 단순화하는 데 도움이 될 수 있습니다. 모의 생성을위한 코드 생성 접근법을 제공하는 인기있는 라이브러리입니다. 그것은 당신의 인터페이스를 기반으로 모의 스트러크와 방법의 생성을 자동화하여 보일러 플레이트 코드를 줄일 수 있습니다.

  • Gomock> : 또 다른 강력한 콘텐츠, gomock 는보다 강력하고 유연한 모킹 솔루션을 제공합니다. 기대 설정 및 검증을 포함하여보다 고급 조롱 시나리오를 허용합니다. 그러나 좀 더 설정이 필요합니다.
  • 이러한 라이브러리 중에서 선택하는 것은 종종 프로젝트 복잡성과 선호도에 달려 있습니다. 더 간단한 프로젝트의 경우 수동으로 조롱을 만드는 것으로 충분할 수 있습니다. 대규모 프로젝트 또는 복잡한 조롱 요구 사항의 경우 <code> 증언/모의> 또는 <code> Gomock 는 효율성을 크게 향상시키고 보일러 플레이트를 줄일 수 있습니다.

    위 내용은 이동 중에 테스트를 위해 모의 개체와 스터브를 작성하려면 어떻게합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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