2014-04-21 9 views
53

Sto eseguendo un test in Go con una dichiarazione per stampare qualcosa (vale a dire per il debug dei test) ma non sta stampando nulla.Come si stampa in un test Go utilizzando il pacchetto "test"?

func TestPrintSomething(t *testing.T) { 
    fmt.Println("Say hi") 
} 

Quando eseguo andare prova su questo file, questo è l'output:

ok  command-line-arguments 0.004s 

L'unico modo per ottenere davvero per stampare, per quanto ne so, è quello di stampare via t .Error(), in questo modo:

func TestPrintSomethingAgain(t *testing.T) { 
    t.Error("Say hi") 
} 

Quali Risulterà:

Say hi 
--- FAIL: TestPrintSomethingAgain (0.00 seconds) 
    foo_test.go:35: Say hi 
FAIL 
FAIL command-line-arguments 0.003s 
gom: exit status 1 

Ho cercato su Google e ho letto il manuale ma non ho trovato nulla.

risposta

59

Le struct testing.T e testing.B entrambi hanno un metodo .Log e .Logf che suono per essere quello che stai cercando. .Log e .Logf sono simili a fmt.Print e fmt.Printf rispettivamente.

Vedi i dettagli qui: http://golang.org/pkg/testing/#pkg-index

fmt.X dichiarazioni di stampa fare lavoro all'interno test, ma si troveranno la loro produzione non è probabilmente sulla schermata in cui ci si aspetta di trovare e, quindi, il motivo per cui si dovrebbe usare il metodi di registrazione in testing.

Se, come nel caso, si desidera visualizzare i registri per i test che non hanno esito negativo, è necessario fornire go test il flag -v (v per verbosità). Maggiori dettagli su bandiere di prova possono essere trovate qui: http://golang.org/cmd/go/#hdr-Description_of_testing_flags

+6

t.Log() non verrà visualizzato fino a dopo il completamento del test, quindi se si sta tentando di eseguire il debug di un test che si blocca o si comporta male sembra che sia necessario utilizzare fmt. Vedere la risposta di PeterSO per l'utilizzo di go test -v per mostrare l'output di fmt.Println durante l'esecuzione dei test. – voutasaurus

57

Per esempio,

package verbose 

import (
    "fmt" 
    "testing" 
) 

func TestPrintSomething(t *testing.T) { 
    fmt.Println("Say hi") 
    t.Log("Say bye") 
} 

go test -v 
=== RUN TestPrintSomething 
Say hi 
--- PASS: TestPrintSomething (0.00 seconds) 
    v_test.go:10: Say bye 
PASS 
ok  so/v 0.002s 

Command go

Description of testing flags

-v 
Verbose output: log all tests as they are run. Also print all 
text from Log and Logf calls even if the test succeeds. 

Package testing

func (*T) Log

func (c *T) Log(args ...interface{}) 

Log formatta i suoi argomenti con formattazione predefinita, analoghe a println, e registra il testo nel log degli errori. Il testo sarà stampato solo se il test ha esito negativo o se il flag -test.v è impostato.

+6

'verbose' è quello che stavo cercando. – cevaris

+2

anwa per visualizzare l'output del registro nella modalità ou stanno testando se stesso –

Problemi correlati