>  기사  >  백엔드 개발  >  ## 기능 테스트에서 완전한 범위를 달성하는 방법: 코드와 실행 사이의 격차를 해소합니까?

## 기능 테스트에서 완전한 범위를 달성하는 방법: 코드와 실행 사이의 격차를 해소합니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-25 18:43:02157검색

## How to Achieve Complete Coverage in Functional Tests: Bridging the Gap Between Code and Execution?

기능 테스트에서 전체 범위를 표시하는 방법

문제:

기능 테스트 실행 컴파일 발견되지 않은 사각지대를 위한 공간을 남겨두는 바이너리 코드.

코드 조각:

<code class="go">package main

import (
    "fmt"
    "math/rand"
    "os"
    "time"
)

var exitCode int

func Test_main(t *testing.T) {
    go main()
    exitCode = <-exitCh
}

func TestMain(m *testing.M) {
    m.Run()
    // can exit because cover profile is already written
    os.Exit(exitCode)
}

func main() {
    rand.Seed(time.Now().UTC().UnixNano())
    for {
        i := rand.Int()
        fmt.Println(i)
        if i%3 == 0 {
            os.Exit(0)
        }
        if i%2 == 0 {
            os.Exit(1)
        }
        time.Sleep(time.Second)
    }
}</code>

해결책:

1. 빌드 태그를 사용하여 주요 기능 제외:

<code class="go">//+build !test

package main

func main() {
    os.Exit(doFunc());
}</code>

태그를 사용하여 빌드:

go test -c -coverpkg=. -o example -tags test

2. 테스트 가능한 코드로 기능 추출:

기능을 다른 클래스로 추출하여 기본 기능을 테스트하지 마세요. 메인 스레드의 코드 실행을 제어하려면 func TestMain을 사용하세요.

3. 모의 사용:

종속성에 대한 모의를 만들어 특정 코드 경로를 격리하고 테스트 가능성을 높입니다.

4. 적용 범위 제한 시간:

응용 프로그램이 종료되기 전에 적용 범위 도구가 프로필을 작성할 시간을 제공하려면 테스트에 시간 제한을 추가하세요.

시간 초과의 예:

<code class="go">func exit(code int) {
    exitCh <- code
    time.Sleep(1 * time.Second) // Allow time for coverage data to be written
    os.Exit(code)
}</code>

이점:

  • 기능 테스트 범위의 사각지대 발견
  • 프로덕션 코드의 테스트 가능성 및 유지 관리 가능성 향상
  • 취재보고의 정확성과 완전성에 대한 자신감

위 내용은 ## 기능 테스트에서 완전한 범위를 달성하는 방법: 코드와 실행 사이의 격차를 해소합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.