golangテスト、ユニットテスト、ベンチマークテスト
2846 ワード
go test xxx.go
バンド-vは冗長出力を表し,成功passも情報を出力する.
ファイル名xx_を使用test.goプロジェクトディレクトリに保存すればいいです.testディレクトリを新規作成することもできます.TestAll
テストはユニットテスト(機能)とベンチマークテスト(性能)に分けられます.
ユニットテスト関数名Testの先頭に、ポインタ型パラメータ(*testing.T)を受信します.Exampleサンプルプログラムは、パラメータを受信することなくユニットテストも計算します.
go test-v-run=「関数名の指定」
結果は次のとおりです.
ベンチマークテストはBenchmarkで始まり、ポインタ型パラメータ(*testing.B)を受信します.
go test -v -run="none"-bench=.ユニットテストは許可されず、すべてのベンチマークテストを実行し、-benchは関数名を指定し、正則をサポートします.
-benchmemは割り当てメモリの回数とバイト数を表し、-benchtime=「3 s」は3秒継続を表す
実行結果:
122 ns/opは1操作あたり122ナノ秒、16 Bは1操作あたり16バイト、2 allocsは1操作あたり2回のメモリ割り当てを示す.
バンド-vは冗長出力を表し,成功passも情報を出力する.
ファイル名xx_を使用test.goプロジェクトディレクトリに保存すればいいです.testディレクトリを新規作成することもできます.TestAll
テストはユニットテスト(機能)とベンチマークテスト(性能)に分けられます.
ユニットテスト関数名Testの先頭に、ポインタ型パラメータ(*testing.T)を受信します.Exampleサンプルプログラムは、パラメータを受信することなくユニットテストも計算します.
go test-v-run=「関数名の指定」
// one_test.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"
)
const checkMark = "\u2713" // %v
const ballotX = "\u2717" //
//
func TestA(t *testing.T) {
t.Log(checkMark, " ,Logf")
t.Error(ballotX, " ,Errorf")
t.Fatal(ballotX, "\t ,Fatalf, \\t ")
t.Log(" ")
}
//
func mockServer() *httptest.Server {
f := func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
fmt.Fprintf(w, "success")
}
return httptest.NewServer(http.HandlerFunc(f))
}
func TestB(t *testing.T) {
server := mockServer()
defer server.Close()
resp, _ := http.Get(server.URL)
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
t.Log(checkMark, "GET :", string(body))
// func init(){ .. } net/http
// req,err := http.NewRequest()
// rw := httptest.NewRecorder()
// http.DefaultServeMux.ServeHTTP(rw,req)
// ,rw.Body
}
// Example , , FAIL。
func ExampleC() {
fmt.Println("233")
// Output:
// 233
}
結果は次のとおりです.
C:/Go/bin/go.exe test -v [C:/Users/pxlol/Desktop/demo]
=== RUN TestA
--- FAIL: TestA (0.00s)
2018_7_31_test.go:17: ✓ ,Logf
2018_7_31_test.go:18: ✗ ,Errorf
2018_7_31_test.go:19: ✗ ,Fatalf, \t
=== RUN TestB
--- PASS: TestB (0.00s)
2018_7_31_test.go:37: ✓ GET : success
=== RUN ExampleC
--- PASS: ExampleC (0.00s)
FAIL
exit status 1
FAIL _/C_/Users/pxlol/Desktop/demo 0.088s
ベンチマークテストはBenchmarkで始まり、ポインタ型パラメータ(*testing.B)を受信します.
go test -v -run="none"-bench=.ユニットテストは許可されず、すべてのベンチマークテストを実行し、-benchは関数名を指定し、正則をサポートします.
-benchmemは割り当てメモリの回数とバイト数を表し、-benchtime=「3 s」は3秒継続を表す
// two_test.go
package main
import (
"fmt"
"strconv"
"testing"
)
func BenchmarkA(b *testing.B) {
number := 10
b.ResetTimer()
for i := 0; i < b.N; i++ {
fmt.Sprintf("%d", number)
}
}
func BenchmarkB(b *testing.B) {
number := 10
b.ResetTimer()
for i := 0; i < b.N; i++ {
strconv.Itoa(number)
}
}
実行結果:
$ go test -v -bench=. -benchmem
goos: windows
goarch: amd64
BenchmarkA-4 20000000 122 ns/op 16 B/op 2 allocs/op
BenchmarkB-4 100000000 11.0 ns/op 0 B/op 0 allocs/op
PASS
ok _/C_/Users/pxlol/Desktop/demo 3.791s
122 ns/opは1操作あたり122ナノ秒、16 Bは1操作あたり16バイト、2 allocsは1操作あたり2回のメモリ割り当てを示す.