web-dev-qa-db-ja.com

「テスト」パッケージを使用して、Goテストでどのように印刷しますか?

Goで何かを印刷するステートメントを使用してテストを実行しています(つまり、テストのデバッグ用)が、何も印刷していません。

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

このファイルでgo testを実行すると、これが出力になります。

ok      command-line-arguments  0.004s

私が知る限り、実際に印刷する唯一の方法は、次のようにt.Error()で印刷することです:

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

これはこれを出力します:

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

Googleで検索してマニュアルを調べましたが、何も見つかりませんでした。

94
platwp

構造体 testing.Ttesting.B の両方に .Log.Logf があり、そのサウンドが探しているものになります。 .Log および .Logf は、それぞれ fmt.Print および fmt.Printf と類似しています。

詳細はこちらをご覧ください: http://golang.org/pkg/testing/#pkg-index

fmt.X print文doはテスト内で動作しますが、出力はおそらく画面上にあるはずで、それを見つけることが期待されるため、なぜそうする必要があるのでしょうかtestingのロギングメソッドを使用します。

あなたの場合のように、失敗していないテストのログを表示したい場合は、go test-vフラグ(冗長性の場合はv)を指定します。フラグのテストの詳細については、こちらをご覧ください。 http://golang.org/cmd/go/#hdr-Description_of_testing_flags

104
voidlogic

例えば、

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

コマンドgo

テストフラグの説明

-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(* T)Log

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

ログは、Printlnに類似したデフォルトの書式設定を使用して引数を書式設定し、エラーログにテキストを記録します。テキストは、テストが失敗するか、-test.vフラグが設定されている場合にのみ印刷されます。

106
peterSO

テストのために時々私は

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

また、次の場所に印刷できます。

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