2016-06-29 2 views
0
내가 지금은 명령을 함께 할, 내 응용 프로그램에서 모든 테스트를 실행하려는

의 효과적인 시험 : 그 하나의 테스트가 매우 빠른 실행에도 불구하고Golang - 여러 패키지

go test ./app/... 

불행하게도 그것은 꽤 오랜 시간이 걸립니다. 문제는 go이 테스트를 실행하기 전에 모든 패키지를 (의존성을 가지고) 컴파일해야한다는 것입니다.

나는 -i 플래그를 사용해 보았지만 조금 도움이되었지만 여전히 테스트 시간에 만족하지 않습니다.

go test -i ./app/... 
go test ./app/... 

여러 패키지를 효율적으로 테스트하는 방법에 대해 더 잘 알고 있습니까?

답변

2

이것은 성격이 go test입니다. 추가 할 코드가있는 특수 런타임을 빌드합니다 (코드 적용 범위를 추적하는 방법입니다). 그것은 충분히 빨리 밤은 경우

, 당신은 두 가지 옵션이 있습니다

1) 예를 들어, ls를 사용하여 패키지 (의 목록을 컴파일 bash는 도구를 사용)을 한 다음 병렬로 개별적으로 각을 실행합니다. bash에서 여러 가지 방법이 있습니다.

이 접근법의 문제점은 출력이 인터리브되고 오류를 추적하기 어렵다는 것입니다.

2) 각 테스트에 t.Parallel() 플래그를 사용하여 테스트 런타임을 병렬로 실행할 수있게하십시오. Go 1.5부터 go testGOMAXPROCS과 함께 실행되며 CPU의 코어 수는 테스트를 동시에 실행할 수 있습니다. 테스트는 기본적으로 동 기적으로 실행됩니다. 각 테스트마다 t.Parallel() 플래그를 설정해야하며 런타임에이 테스트를 병렬로 실행하는 것이 좋습니다.

모범 사례를 따르고 SoC/디커플링을 사용한 것으로 가정하고 다른 테스트 도중에 변경 될 수있는 전역 상태가 없으며 뮤텍스 잠금이 없거나 거의 사용되지 않는다는 문제가 있습니다. 어떤 경쟁 조건 문제 (사용 -race) 등

-

의견 : 개인적으로, 나는 설정 내 IDE는 모든 저장에 gofmtgo test -cover -short를 실행할 수 없습니다. 그렇게하면 내 코드가 항상 형식화되고 테스트가 실행됩니다. 이는 내가있는 패키지 내에서만 실행되어 실패했는지 여부를 알려줍니다. -cover 플래그는 테스트를 거친 코드와 테스트하지 않은 코드의 라인을 표시하기 위해 IDE에서 작동합니다. -short 플래그를 사용하면 실행하는 데 시간이 걸릴 것으로 알고있는 테스트를 작성할 수 있으며 해당 테스트 내에서 t.Short() 부울을 검사하여 t.Skip() 테스트를 수행 할 수 있는지 확인할 수 있습니다. 좋아하는 IDE가이 패키지를 설정할 수있는 패키지가 있어야합니다 (나는 Sublime, VIM 및 Atom에서이 작업을 수행했습니다).

그런 식으로 내가 편집하는 패키지에서 즉석 피드백을받습니다.

코드를 커밋하기 전에 모든 패키지에서 모든 테스트를 실행합니다. 아니면 C.I.을 가질 수 있습니다. 서버가해라.

또는 -short 플래그와 build tags (예 : go test -tags integration)을 사용하여 테스트를 리팩터링하여 단위 테스트를 통합 테스트와 분리 할 수 ​​있습니다.- 내가 go testgo test -short에 기본적으로 실행이 시험을 빨리 병렬 <에서 실행할 수

  • 시험 : 이것은 내 테스트를 작성하는 방법입니다.

  • 외부 구성 요소가 필요한 테스트 또는 테스트가 실행하려면 추가 입력이 필요합니다 (예 : go test -tags integration). 이 패턴은 정상적인 go test으로 통합 테스트를 실행하지 않으므로 추가 태그를 지정해야합니다. 나는 통합 테스트를 전반적으로 실행하지 않습니다. 그것이 CI 서버가 필요한 것입니다. 당신이 당신의 검사 결과에 대한 일관성있는 이름 방식을 따르는 경우

0

당신은 쉽게 당신이 -run 플래그를 사용하여 실행 이들의 수를 줄일 수 있습니다.

go help testflag 인용 :

실행

-run 정규식 만 테스트와 정규 표현 매칭 예. foo, barqux :

그래서 당신이 3 개 패키지가 있다고 가정 해 보자. 이러한 패키지의 테스트는 각각 TestFoo.., TestBar..TestQux..과 같이 각각 지정됩니다.

foobar 패키지의 테스트 만 실행하려면 go test -run '^Test(Foo|Bar)*' ./...을 수행 할 수 있습니다.