2015-02-05 18 views
9

Tôi đang cố gắng sử dụng go test -cover để đo lường mức độ phù hợp của dịch vụ mà tôi đang xây dựng. Nó là một API REST và tôi đang thử nghiệm nó bằng cách kéo nó lên, thực hiện các yêu cầu HTTP kiểm tra và xem xét các phản hồi HTTP. Các thử nghiệm này không phải là một phần của gói dịch vụ và go tool cover trả về mức độ kiểm tra 0%. Có cách nào để có được phạm vi kiểm tra thực tế không? Tôi mong đợi một thử nghiệm kịch bản trường hợp tốt nhất trên một điểm cuối nhất định sẽ bao gồm ít nhất 30-50% mã cho trình xử lý điểm cuối cụ thể và bằng cách thêm các thử nghiệm khác cho lỗi phổ biến để cải thiện thêm nữa.Làm cách nào để đo mức độ kiểm tra tích hợp Golang?

Trả lời

7

tôi chỉ vào chỉ thị -coverpkg, điều mà tôi cần - đo lường phạm vi kiểm tra trong một gói cụ thể, ngay cả khi các thử nghiệm sử dụng gói này và không phải là một phần của gói đó. Ví dụ:

$ 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 

so với

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

Trong ví dụ trên, tôi có kiểm tra trong main_test.go mà là ở package main đó là sử dụng package mypackage. Tôi chủ yếu quan tâm đến mức độ phù hợp của package mypackage vì nó chứa 99% logic kinh doanh trong dự án.

Tôi khá mới để Go, vì vậy nó là khá có thể rằng đây không phải là cách tốt nhất để đo lường phạm vi kiểm tra thông qua các bài kiểm tra tích hợp.

+0

Tuyệt vời! Tôi chỉ liên kết [thread golang-nut có liên quan] này (https://groups.google.com/forum/#!topic/golang-nuts/fnDBPPUDdQ4). – Simon

+0

Cảm ơn, Simon. Đây thực sự là những gì tôi đang tìm kiếm! –

1

Theo như tôi biết, nếu bạn muốn bảo hiểm, bạn cần chạy go test -cover. Tuy nhiên, việc thêm một lá cờ mà bạn có thể vượt qua sẽ cho phép các bài kiểm tra bổ sung này đủ dễ dàng, vì vậy bạn có thể làm cho chúng trở thành một phần của bộ thử nghiệm nhưng không chạy chúng một cách bình thường.

Vì vậy, thêm một cờ dòng lệnh trong bạn whatever_test.go

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

Sau đó, trong mỗi bài kiểm tra làm điều gì đó như thế này

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

Sau đó, để chạy thử nghiệm hội nhập

go run -cover -integration-test 
+0

Cảm ơn bạn đã bình luận của bạn, nhưng điều này không chính xác những gì tôi cần. Vấn đề là tỷ lệ bảo hiểm không bao gồm mã trong các gói khác của dự án. Tôi sẽ cập nhật câu hỏi của tôi để phản ánh điều đó và làm cho nó rõ ràng hơn. –

+0

@antonevangelatov Tôi hiểu ý bạn là gì! Tôi sẽ để lại câu trả lời này chỉ trong trường hợp bất cứ ai tìm thấy nó hữu ích, và tôi lưu ý '-coverpkg' trong câu trả lời của bạn, cảm ơn! –

Các vấn đề liên quan