web-dev-qa-db-fra.com

Comment imprimez-vous dans un test Go à l'aide du package "testing"?

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é.

94
platwp

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

104
voidlogic

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

Commande aller

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.

Test du paquet

func (* T) Log

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.

106
peterSO

Pour tester parfois je fais

fmt.Fprintln(os.Stdout, "hello")

En outre, vous pouvez imprimer sur:

fmt.Fprintln(os.Stderr, "hello)
1
Eddy Hernandez