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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
sayaka713y
December 14, 2018
Technology
1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go言語でテストしてみたお話/Test in Golang
第10回Tech Doでの発表資料です。
sayaka713y
December 14, 2018
Other Decks in Technology
See All in Technology
ホームラボ紹介
y_sera15
0
140
PLATEAU で バーチャル花火大会
tatsuya1970
0
120
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
4
1.4k
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
210
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
210
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
240
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
130
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
6
1.4k
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
8
2.4k
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
210
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
990
Unsuck your backbone
ammeep
672
58k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
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ハンズオン資料