기능 테스트에서 전체 범위를 표시하는 방법
문제:
기능 테스트 실행 컴파일 발견되지 않은 사각지대를 위한 공간을 남겨두는 바이너리 코드.
코드 조각:
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!