Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go言語でテストしてみたお話/Test in Golang
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
sayaka713y
December 14, 2018
Technology
2
1k
Go言語でテストしてみたお話/Test in Golang
第10回Tech Doでの発表資料です。
sayaka713y
December 14, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
100
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
120
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
260
Context Engineeringの取り組み
nutslove
0
360
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
970
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
250
AWS Network Firewall Proxyを触ってみた
nagisa53
1
240
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.8k
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
220
Red Hat OpenStack Services on OpenShift
tamemiya
0
120
超初心者からでも大丈夫!オープンソース半導体の楽しみ方〜今こそ!オレオレチップをつくろう〜
keropiyo
0
110
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
180
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
430
The Cult of Friendly URLs
andyhume
79
6.8k
Evolving SEO for Evolving Search Engines
ryanjones
0
130
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Side Projects
sachag
455
43k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Transcript
Go言語で テストしてみた お話 基幹サービス開発部 山澤 沙也加 1
Go言語って。。。 2 Googleが開発した プログラミング言語の1つ 2009年にリリースされた 比較的新しい言語 世界中で 人気が高い 簡単な記述で 実装できる
◆アジェンダ Go言語でテストするには? テストコードを書いてみよう テスト実行コマンド 少し応用のテスト おまけ:ブラウザテスト 最後に 3
Go言語でテストするには? テスト全般を支援するtestingパッケージが標準である → ユニットテスト 、ベンチマークテストをサポート ルール • パッケージ :testingパッケージをimportする •
ファイル名 :xxx_test.go • テスト関数名:func TestXxx (t *testing.T) 4
構成 • テスト対象のコードと同じディレクトリに配置 tech_do ┣━ main.go ┗━ hello ┣━ hello.go
┗━ hello_test.go 5 Go言語でテストするには?
サンプルコード 6 テストコードを書いてみよう
サンプルコード 7 テストコードを書いてみよう 実行結果
テストコード 8 テストコードを書いてみよう
テスト状態やログの管理に利用できる関数 9 テストコードを書いてみよう Error() Errorf() Fail() FailNow() Failed() Fatal() Fatalf()
Log() Logf() Skip() ...etc
◆ func (t *T) Log(args ...interface{}) 引数の文字列をエラーログに記録する ◆ func (t
*T) Logf(format string, args ...interface{}) フォーマットを指定して、引数の文字列をエラーログに記録する 第一引数 :フォーマット 第二引数~:文字列 → テストが成功したのか失敗したのかは管理していない 10 テストコードを書いてみよう
◆ func (t *T) Fail() エラーがあったことを記録する 以降の処理は継続する ◆ func (t
*T) FailNow() エラーがあったことを記録する 以降の処理は終了する 11 テストコードを書いてみよう
◆ func (t *T) Error(args ...interface{}) エラーがあったことと引数の文字列をエラーログに記録する 以降の処理は継続する ◆ func
(t *T) Fatal(args ...interface{}) エラーがあったことと引数の文字列をエラーログに記録する 以降の処理は終了する 12 テストコードを書いてみよう →Log()とFail()を呼び出すことと同じ →Log()とFailNow()を呼び出すことと同じ
13 テストコードを書いてみよう ErrorとErrorf FatalとFatalf 【参考】
14 関数 結果 処理継続 ログ出力 フォーマット Log - 〇 〇
× Logf - 〇 〇 〇 Fail エラー 〇 × - Error エラー 〇 〇 × Errof エラー 〇 〇 〇 FailNow エラー × × - Fatal エラー × 〇 × Fatalf エラー × 〇 〇 テストコードを書いてみよう 【参考】
• go test :テスト実行 • go test -v :テスト実行(詳細な実行結果出力) •
go test -cover :テスト実行+コードカバレッジ • go test -cover -v :テスト実行+コードカバレッジ (詳細な実行結果出力) 15 テスト実行コマンド
> go test > go test -v 16 テスト実行コマンド テスト成功
> go test -cover > go test -cover -v 17
テスト実行コマンド テスト成功
テストコード(エラーが出るようにする) 18 テスト実行コマンド
> go test > go test -v 19 テスト実行コマンド テスト失敗
→ 「-v」の有無に関係なく、Logの内容も出力される
パッケージ単位 go test ./hello • 指定したパッケージにある全ての_test.goを実行 • 実行時:ルートディレクトリに移動すること テスト関数単位 go
test -run TestHello • 指定したテスト関数を実行 • 実行時:テストコードのあるディレクトリに移動すること 20 テスト実行コマンド
プログラム単位 <テストコード> <テスト対象コード>の順でプログラムを指定 go test hello_test.go hello.go ┗ 実行時:テストコードのあるディレクトリに移動すること go
test hello/hello_test.go hello/hello.go ┗ 実行時:ルートディレクトリに移動すること 21 テスト実行コマンド
レシーバ付き関数のテスト • テスト関数名:func Test{レシーバ型}_Xxx (t *testing.T) サブテスト • func (t
*T) Run(name string, f func(t *T)) bool 22 少し応用のテスト
23 少し応用のテスト サンプルコード
24 少し応用のテスト テストコード:レシーバ、サブテスト
25 少し応用のテスト 実行結果
サブテスト単位 go test -v -run <関数名>/<サブテストの名前> • 指定したサブテストのみ実行 26 少し応用のテスト
前処理・後処理 • func TestMain(m *testing.M) • m.Run()を書くことでテスト関数が実行される ┗ m.Run()の数 =
テスト関数が実行される回数 • m.Run()を書かないとテスト関数は実行されない 27 少し応用のテスト
サブテストの並列処理 • func (t *T) Parallel() • 対象のサブテスト内にt.Parallel()を書くことで並列処理される • 並列処理する複数のサブテストはt.Run(name,
func)でラップする 28 少し応用のテスト
29 少し応用のテスト テストコード:前処理・後処理、並列処理 前処理 サブテスト実行 後処理
30 少し応用のテスト 実行結果
31 おまけ
Selenium WebDriver • ブラウザでWebアプリケーションをテストするツール • 環境変数でパスを通すこと agouti • WebDriverクライアント •
テストフレームワーク 32 ブラウザテスト Windows用のコマンド(chocolatey) Mac用のコマンド(Homebrew)
基本の書き方 33 ブラウザテスト
テストしたい処理【例:ログイン】 34 ブラウザテスト
• Go言語はテストコードもシンプルで直観的 • テストのサポートが充実している • Selenium WebDriver + agoutiでブラウザテストも簡単 何かプログラムを実装する際には、
テストコード含めてGo言語で実装してみてください! 35 最後に
36 ご清聴ありがとうございました (*^_^*)
37 参考文献 • 「testing - The Go Programming Language」 https://golang.org/pkg/testing/
• 「agouti - GoDoc」 https://godoc.org/github.com/sclevine/agouti • 「Agouti」 https://agouti.org/ • 第2回Goハンズオン資料