2015-02-05 2 views
9

go test -cover을 사용하여 현재 구축중인 서비스의 테스트 범위를 측정하려고합니다. 그것은 REST API이며 테스트 HTTP 요청을 만들고 HTTP 응답을 검토하여이를 테스트합니다. 이 테스트는 서비스 팩키지의 일부가 아니며 go tool cover은 테스트 적용 범위가 0 %입니다. 실제 테스트 커버리지를 얻을 수있는 방법이 있습니까? 주어진 엔드 포인트에서 최상의 엔드 포인트 시나리오 테스트가 특정 엔드 포인트 핸들러의 코드의 최소 30-50 %를 차지할 것으로 기대하고,이를 향상시키기 위해 일반적인 오류에 대한 테스트를 추가합니다.Golang 통합 테스트 커버리지를 측정하는 방법은 무엇입니까?

답변

7

를 실행 할 -coverpkg 지시어를 가리키며, 필요한 것을 수행합니다. 이 패키지를 사용하는 테스트 및 패키지의 일부가 아닌 테스트를 포함하여 특정 패키지의 테스트 적용 범위. 예를 들어

$ go test -cover -coverpkg mypackage ./src/api/... 
ok  /api 0.190s coverage: 50.8% of statements in mypackage 
ok  /api/mypackage 0.022s coverage: 0.7% of statements in mypackage 

비해 위의 예에서

$ go test -cover ./src/api/... 
ok  /api 0.191s coverage: 71.0% of statements 
ok  /api/mypackage 0.023s coverage: 0.7% of statements 

에, I는 package mypackage을 사용하는지에 package main main_test.go에서 테스트가. 나는 대부분 프로젝트의 비즈니스 로직의 99 %를 포함하고 있기 때문에 package mypackage의 적용 범위에 관심이있다.

저는 매우 새로운 제품입니다. 따라서 이것이 통합 테스트를 통해 테스트 커버리지를 측정하는 가장 좋은 방법은 아닙니다.

+0

좋아요! 나는이 [관련 golang-nuts thread] (https://groups.google.com/forum/#!topic/golang-nuts/fnDBPPUDdQ4)를 연결하고 있습니다. – Simon

+0

고마워, 사이먼. 이것은 내가 실제로 찾고 있던 것입니다! –

1

범위를 알고 싶다면 go test -cover을 실행해야합니다.

그러나 추가 테스트를 수행 할 수있는 플래그를 추가하기는 쉽기 때문에 테스트 스위트의 일부로 만들 수 있지만 정상적으로 실행하지는 마십시오.

그래서 각 테스트에 그런 다음 whatever_test.go

var integrationTest = flag.Bool("integration-test", false, "Run the integration tests") 

에 명령 줄 플래그를 추가이

func TestSomething(t *testing.T){ 
    if !*integrationTest { 
     t.Skip("Not running integration test") 
    } 
    // Do some integration testing 
} 

같은 그런 다음 내가했던 통합 테스트

go run -cover -integration-test 
+0

의견을 보내 주셔서 감사합니다. 그러나 이것이 필요한 것은 아닙니다. 문제는 적용 범위가 프로젝트의 다른 패키지에있는 코드를 포함하지 않는다는 것입니다. 나는 그것을 반영하고 명확하게하기 위해 나의 질문을 업데이트 할 것이다. –

+0

@antonevangelatov 무슨 뜻인지 알 겠어! 누구나 유용하다고 생각한 경우를 대비하여이 답을 남겨 두겠다. 답안에'-coverpkg'를 적어 둡니다. 감사합니다! –

관련 문제