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
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.
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
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. –
@antonevangelatov Vedo cosa intendi! Lascerò questa risposta nel caso qualcuno la trovi utile, e noto '-coverpkg' nella tua risposta, grazie! –
Ottimo! Sto solo collegando questo [relativo thread golang-nuts] (https://groups.google.com/forum/#!topic/golang-nuts/fnDBPPUDdQ4). – Simon
Grazie, Simon. Questo è davvero quello che stavo cercando! –