Come eseguire i casi di test in un file specificato?


205

I miei casi di test del pacchetto sono sparsi su più file, se lo eseguo go test <package_name>esegue tutti i casi di test nel pacchetto.

Tuttavia, non è necessario eseguirli tutti. Esiste un modo per specificare un file go testda eseguire, in modo che esegua solo i casi di test definiti nel file?

go 

Risposte:


326

Ci sono due modi. Quello semplice è usare la -runbandiera e fornire un modello che corrisponda ai nomi dei test che si desidera eseguire.

Esempio:

$ go test -run NameOfTest

Vedi i documenti per maggiori informazioni.

L'altro modo è quello di nominare il file specifico, contenente i test che si desidera eseguire:

$ go test foo_test.go

Ma c'è un problema. Funziona bene se:

  • foo.goè dentro package foo.
  • foo_test.goè presente package foo_teste importa "pippo".

Se foo_test.goe foo.gosono lo stesso pacchetto (un caso comune), è necessario nominare tutti gli altri file necessari per la compilazione foo_test. In questo esempio sarebbe:

$ go test foo_test.go foo.go

Consiglierei di usare il -runmodello. Oppure, dove / quando possibile, eseguire sempre tutti i test del pacchetto.


1
ti dispiacerebbe approfondire il primo (facile) modo per -runfavore? Non riesco a trovare alcun riferimento manuale su quello.

1
Puoi anche trovare informazioni al riguardo congo help testflag
Jeffrey Martinez,

Quando uso il comando go test utils.go utils_test.gol'output è ok command-line-arguments 0.002s. Non esegue il test. Il motivo per cui voglio usare questa modalità di test è perché il pacchetto contiene molti file e non vengono ancora compilati tranne utils. Quindi vorrei finalizzare utils prima di lavorare su altri file. Come lo posso fare ?
Chmike,

Se vuoi vedere cosa è stato registrato durante il test, vale la pena menzionare il -vflag (dettagliato). Dai documenti-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
robstarbuck

121

La risposta di @ zzzz è per lo più completa, ma solo per salvare gli altri dal dover scavare nella documentazione di riferimento è possibile eseguire un singolo test in un pacchetto come segue:

go test packageName -run TestName

Si noti che si desidera passare il nome del test, non il nome del file in cui esiste il test.

Il -runflag accetta effettivamente una regex in modo da poter limitare l'esecuzione del test a una classe di test. Dai documenti:

-run regexp
    Run only those tests and examples matching the regular
    expression.

28
Vale la pena notare che il nome del pacchetto è il nome completo del pacchetto, ad esempio "github.com/you/stuff/a/b/c"
garbagecollector

1.9.3 accetta anche il percorso relativo del pacchetto.

2
Non so perché, ma per qualche motivo, dovrei specificare "./" prima del nome del pacchetto
Roozbeh Zabihollahi

12

Quando eseguo un singolo test di solito faccio:

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1

-count 1assicura inoltre che il test venga eseguito ogni volta anziché essere memorizzato nella cache. Utile quando stai testando contro le condizioni di gara e hai un test che fallisce solo a volte. Nelle versioni Go che non utilizzano moduli lo stesso si può ottenere impostando GOCACHE=offma ciò interagisce male con i moduli Go.


6

nel plugin intelliJ IDEA go-lang (e presumo in jetbrains Gogland) puoi semplicemente impostare il tipo di test su file in esecuzione> modifica configurazioni

screenshot crea go test su go file


2
In Gogland puoi semplicemente fare clic con il pulsante destro del mouse sul file di test e scegliere "esegui foo_test.go" costruirà il pacchetto con i test e quindi passerà una regex contenente i nomi di tutti i test in quel file di test al flag -run. Una funzionalità davvero utile.
Eloff,

4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)

2
go test -v ./<package_name> -run Test

Impedisce la memorizzazione nella cache dei risultati del test.

go test -count=1 ./<package_name> -run Test

0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc deve essere all'interno di un gofile di test in quel pacchetto
  • Siamo in grado di fornire un'espressione regolare per abbinare una serie di casi di test o solo la funzione esatta del caso di test per eseguire un singolo caso di test. Per esempio-run TestCaseFunc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.