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
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
Snowflake Marketplaceには”PODB”という便利なオープンデータがあってAI Ready対応してるらしいよ/the-snowflake-marketplace-has-a-useful-open-data-source-called-PODB-that-is-apparently-AI-ready
shinyaa31
0
270
QAエンジニアがプロダクト専任で チームの中に入ると。。。?/登壇資料(杉森 太樹)
hacobu
PRO
0
170
データエンジニアとして生存するために 〜界隈を盛り上げる「お祭り」が必要な理由〜 / data_summit_findy_Session_1
sansan_randd
1
1k
Data & AIの未来とLakeHouse
ishikawa_satoru
0
690
Data Engineering Guide 2025 #data_summit_findy by @Kazaneya_PR / 20251106
kazaneya
PRO
10
2.1k
エンジニアにとってコードと並んで重要な「データ」のお話 - データが動くとコードが見える:関数型=データフロー入門
ismk
0
350
Logik: A Free and Open-source FPGA Toolchain
omasanori
0
260
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
1.3k
Snowflakeとdbtで加速する 「TVCMデータで価値を生む組織」への進化論 / Evolving TVCM Data Value in TELECY with Snowflake and dbt
carta_engineering
2
230
QAセントラル組織が運営する自動テストプラットフォームの課題と現状
lycorptech_jp
PRO
0
230
今日から使える AWS Step Functions 小技集 / AWS Step Functions Tips
kinunori
5
630
個人開発からエンプラまで。AIコードレビューで開発を楽しもう
moongift
PRO
0
280
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.6k
What's in a price? How to price your products and services
michaelherold
246
12k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6k
Designing for humans not robots
tammielis
254
26k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Code Review Best Practice
trishagee
72
19k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Faster Mobile Websites
deanohume
310
31k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
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ハンズオン資料