2015-02-05 12 views
9

Sto tentando di utilizzare go test -cover per misurare la copertura di prova di un servizio che sto costruendo. È un'API REST e la sto testando girandola, facendo richieste di test HTTP e rivedendo le risposte HTTP. Questi test non fanno parte dei pacchetti dei servizi e go tool cover restituisce una copertura del test dello 0%. C'è un modo per ottenere la copertura effettiva del test? Mi aspetterei un test di scenario migliore su un dato endpoint per coprire almeno il 30-50% del codice per il gestore di endpoint specifico e aggiungendo altri test per l'errore comune per migliorarlo ulteriormente.Come misurare la copertura del test di integrazione di Golang?

risposta

7

ero punta alla direttiva -coverpkg, che fa ciò di cui ho bisogno: misura s la copertura del test in un particolare pacchetto, anche se test che usano questo pacchetto e non ne fanno parte. Ad esempio:

$ 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 

rispetto

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

Nell'esempio precedente, ho test in main_test.go che è in package main che utilizza package mypackage. Sono principalmente interessato alla copertura di package mypackage poiché contiene il 99% della logica di business nel progetto.

Sono abbastanza nuovo da fare, quindi è del tutto possibile che questo non sia il modo migliore per misurare la copertura del test tramite test di integrazione.

+0

Ottimo! Sto solo collegando questo [relativo thread golang-nuts] (https://groups.google.com/forum/#!topic/golang-nuts/fnDBPPUDdQ4). – Simon

+0

Grazie, Simon. Questo è davvero quello che stavo cercando! –

1

Per quanto ne so, se si desidera la copertura è necessario eseguire go test -cover.

Tuttavia è abbastanza facile aggiungere un flag che è possibile passare in cui abilitare questi test aggiuntivi, in modo da renderli parte della suite di test ma non eseguirli normalmente.

in modo da aggiungere una bandiera riga di comando nel whatever_test.go

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

Poi in ciascuna prova fare qualcosa di simile

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

Quindi per eseguire i test di integrazione

go run -cover -integration-test 
+0

Grazie per il tuo commento, ma questo non è esattamente quello di cui ho bisogno. Il problema era che la percentuale di copertura non copre il codice in altri pacchetti del progetto. Aggiornerò la mia domanda per riflettere e renderla più chiara. –

+0

@antonevangelatov Vedo cosa intendi! Lascerò questa risposta nel caso qualcuno la trovi utile, e noto '-coverpkg' nella tua risposta, grazie! –

Problemi correlati