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
1k
2
Share
Go言語でテストしてみたお話/Test in Golang
第10回Tech Doでの発表資料です。
sayaka713y
December 14, 2018
Other Decks in Technology
See All in Technology
AIを活用したアクセシビリティ改善フロー
degudegu2510
1
150
ZOZOTOWNリプレイスでのSkills導入までの流れとこれから
zozotech
PRO
4
3k
Strands Agents × Amazon Bedrock AgentCoreで パーソナルAIエージェントを作ろう
yokomachi
2
240
2026-04-02 IBM Bobオンボーディング入門
yutanonaka
0
240
マルチモーダル非構造データとの闘い
shibuiwilliam
1
190
バックオフィスPJのPjMをコーポレートITが担うとうまくいく3つの理由
yueda256
1
290
レガシーシステムをどう次世代に受け継ぐか
tachiiri
0
300
Hooks, Filters & Now Context: Why MCPs Are the “Hooks” of the AI Era
miriamschwab
0
110
Claude Teamプランの選定と、できること/できないこと
rfdnxbro
1
1.6k
ふりかえりがなかった職能横断チームにふりかえりを導入してみて学んだこと 〜チームのふりかえりを「みんなで未来を考える場」にするプロローグ設計〜
masahiro1214shimokawa
0
190
OPENLOGI Company Profile
hr01
0
83k
Hello UUID
mimifuwacc
0
120
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
140
Embracing the Ebb and Flow
colly
88
5k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
The SEO Collaboration Effect
kristinabergwall1
0
420
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
170
Automating Front-end Workflow
addyosmani
1370
200k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
410
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
170
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ハンズオン資料