2013-10-05 13 views
52

Voglio creare un pacchetto in Go con test ed esempi per il pacchetto come sottodirectory per mantenere lo spazio di lavoro più pulito. È possibile e se sì, come?Test Golang nella sottodirectory

Tutta la documentazione inserisce sempre il codice di test nello stesso posto dell'altro codice, è meglio in qualche modo o solo convenzione?

Grazie.

+3

Nota: 'go test./...' esegue test sulla cartella corrente * e * su tutte le sottocartelle. Vedi [la mia risposta qui sotto] (http://stackoverflow.com/a/21725603/6309) – VonC

+0

Possibile duplicato di [Come fare per andare a testare tutti i test nel mio progetto?] (Http://stackoverflow.com/ domande/16353016/how-to-go-test-all-testings-nel-mio-progetto) –

+0

stavo pensando la stessa cosa. avendo problemi a mettere i test n una dir separata perché il diretore sullo stesso livello ha sub dir. –

risposta

86

Si noti che è possibile run go test "ricorsivamente": è necessario lista tutti i pacchetti che si desidera testare.

Se sei la cartella principale del progetto Go, Tipo:

go test ./... 

Il './...' notazione è descritta nella sezione "Description of package lists" della "command go":

Un percorso di importazione è uno schema se include uno o più caratteri "...", ognuno dei quali può corrispondere a qualsiasi stringa, inclusa la stringa vuota e le stringhe contenenti barre.

Tale modello si espande in tutte le directory dei pacchetti che si trovano negli alberi GOPATH con nomi corrispondenti ai modelli.

Come caso speciale, x/... corrisponde a x e alle sottodirectory di x.
Ad esempio, net/... si espande a net e pacchetti nelle relative sottodirectory.


Se a mantenere i file _test.go in una sottocartella, il comando 'go test ./...' sarà in grado di raccoglierli.
Ma:

  • dovrai prefisso le variabili e le funzioni esportate (utilizzato nelle prove) con il nome del pacchetto, in modo che il file di test per essere in grado di accedere al pacchetto esportato contenuti.
  • non si accederà al contenuto non esportato.

Detto questo, preferirei comunque mantenere il file _test.go accanto al file sorgente principale: è più facile da trovare.

+1

Alcuni potrebbero obiettare che il non accesso a cose private è normale test di black-box e migliore. Per quanto riguarda il dover qualificare i simboli pubblici, puoi sempre importare _ "...". – ddevienne

10

Metti i test accanto al tuo codice nella stessa directory in un file chiamato file_test.go dove "file" è il nome del file del codice sorgente che stai testando. Questa è una convenzione e ho trovato che sia la migliore nella mia esperienza personale.

Se lo strumento go test non è abbastanza automatizzato abbastanza per voi, si potrebbe guardare in GoConvey, che ha un'interfaccia utente web che aggiornare ed eseguire i test Go tradizionali così come le prove GoConvey (che si basano sul comportamento automaticamente e sono più autodocumentanti rispetto ai tradizionali test Go).

+2

GoConvey è fantastico (e sto aspettando la nuova interfaccia utente con grande attesa). Lo sto utilizzando nel mio attuale progetto come in https://github.com/VonC/asciidocgo/blob/master/abstractNode_test.go, ad esempio). Tuttavia, 'go test' può funzionare anche per le sottocartelle. Vedi [la mia risposta sotto] (http://stackoverflow.com/a/21725603/6309) – VonC

+0

Proprio come te. In effetti, è probabilmente più rilevante della mia risposta a questa domanda. – Matt

+0

Non importa, GoConvey rimane ancora;) – VonC

0

io normalmente non fare test, ma è possibile raggruppare i file in directory e l'uso di importazione come

import "./models" se è di un livello fuori
import "../models se è un livello fuori e di un livello nella

ad esempio, per:
./models/todo.go
./test/todo_test.go

per testare todo.go da todo_test.go, tua importazione nel todo_test.go sarà

import "../models"

+0

Questo metodo di importazione del codice funziona solo per le funzioni esposte. Non sembra comportarsi come se fossero nello stesso pacchetto, anche se pensavi di metterli esplicitamente nello stesso pacchetto. Quindi questa soluzione non risolve il problema per i test unitari. –

0

Si prega di provare il seguente repository github.

https://github.com/appleboy/golang-testing

È possibile scaricare lo script di test golang.

$ curl -fsSL https://raw.githubusercontent.com/appleboy/golang-testing/master/coverage.sh /usr/local/bin/coverage 
$ chmod +x /usr/local/bin/coverage 
Problemi correlati