J'effectue un test dans Go avec une instruction pour imprimer quelque chose (c'est-à-dire pour le débogage des tests) mais n'imprime rien.
func TestPrintSomething(t *testing.T) {
fmt.Println("Say hi")
}
Quand je lance go test sur ce fichier, voici le résultat:
ok command-line-arguments 0.004s
La seule façon de l'obtenir vraiment, pour autant que je sache, est de l'imprimer via t.Error (), comme suit:
func TestPrintSomethingAgain(t *testing.T) {
t.Error("Say hi")
}
Ce qui sort ceci:
Say hi
--- FAIL: TestPrintSomethingAgain (0.00 seconds)
foo_test.go:35: Say hi
FAIL
FAIL command-line-arguments 0.003s
gom: exit status 1
J'ai cherché sur Google et parcouru le manuel, mais je n'ai rien trouvé.
Les structs testing.T
et testing.B
les deux ont un .Log
et .Logf
méthode qui semble correspondre à ce que vous recherchez. .Log
et .Logf
sont similaires à fmt.Print
et fmt.Printf
respectivement.
Voir plus de détails ici: http://golang.org/pkg/testing/#pkg-index
fmt.X
les instructions print fonctionnent dans les tests, mais vous constaterez que leur sortie n’est probablement pas affichée à l’écran où vous vous attendez pour la trouver et, par conséquent, pourquoi. devrait utiliser les méthodes de journalisation dans testing
.
Si, comme dans votre cas, vous souhaitez consulter les journaux des tests qui ne échouent pas, vous devez fournir go test
le -v
flag (v pour verbosité). Plus de détails sur les drapeaux de test peuvent être trouvés ici: http://golang.org/cmd/go/#hdr-Description_of_testing_flags
Par exemple,
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
Description des drapeaux de test
-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
func (c *T) Log(args ...interface{})
Le journal formate ses arguments en utilisant le formatage par défaut, analogue à Println, et enregistre le texte dans le journal des erreurs. Le texte ne sera imprimé que si le test échoue ou si le drapeau -test.v est défini.
Pour tester parfois je fais
fmt.Fprintln(os.Stdout, "hello")
En outre, vous pouvez imprimer sur:
fmt.Fprintln(os.Stderr, "hello)