Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go言語でテストしてみたお話/Test in Golang
Search
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
夫婦で子育てするための育児標準化
codmoninc
PRO
0
340
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
S3 Filesで挑む! 八戸せんべい汁の食べ頃問題
usanchuu
0
100
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
250
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
190
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
220
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
300
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
590
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
4 Signs Your Business is Dying
shpigford
187
23k
Believing is Seeing
oripsolob
1
240
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The Invisible Side of Design
smashingmag
301
52k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Designing for Timeless Needs
cassininazir
1
530
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
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ハンズオン資料