JUnit入門/TDD入門
自己紹介
石橋隆平
Refactoring Specialis
t

零細SIer→ユーザベース
→2017/4月BIZREACH入社
ScalaMatsuri運営委員(2016~
)

twitter:@cactaceae
アジェンダ
Intellij IDEA ショートカットの紹介
JUnit入門
良いユニットテスト
TDD入門
イントロダクション
Kent Beck
XP考案者
Agile Manifest 起草者
デザインパターン 著者
テスト駆動開発 著者
JUnit 開発者
Githubからプロジェクトをクローンして
$ git clone git@github.com:rysh/junittutorial.git
プロジェクトの準備
プロジェクトをインポート


import project > junittutorial


import project from external model > maven
参考資料
実践JUnit 50分でわかるテスト駆動開発
ショートカットの紹介
Testショートカット
テストクラス作成 Command + Shift +
T

実装クラスへ移動 Command + Shift +
T

テストクラスへ移動 Command + Shift +
T

テストケース作成 Command + Shift +
T

テスト実行 Shift + F10(Fn)
Refactorショートカット
変数抽出 Command + Option +
V

メソッド抽出 Command + Option +
M

変数のインライン化 Command + Option +
N

メソッドのインライン化 Command + Option + N
ショートカットが違う場合
右クリックメニューから確認
Preferences > Keymap から確認
JUnit入門
初めてのJUnit
デモ
テストの例
アサーションの種類
アサーションの種類
assertTrue
 

fai
l

assertEqual
s

assertTha
t

他、色々
HamcrestMatchers
柔軟な検査と詳しいレポートが特徴
assertThatと組み合わせて使う
HamcrestMatchers
コレクション内に存在するかどうか検証する
いずれかが当てはまるかどうか検証する
順不同で指定したオブジェクトが全てコレクション
に含まれるかどうか検証する
指定されたマッチャーがコレクション内のすべてのオ
ブジェクトに適合するかどうか検証する
一つだけ覚えておくと、Sourceへ ジャンプ後、
Cmd + 1でクラス一覧がみられる
テストの構成
テストの構成
テストコードの置き場所
AA
A

オブジェクトのふるまいをテストする
1つの目的に特化したテスト
意味のあるテスト
テストコードの置き場所
JUnitでは
テスト対象のコードと同じプロジェクト
テスト専用のパッケージ
テスト対象のコードと同じディレクトリ構成
Javascriptではテスト対象と同じディレクトリにテスト
コードを置く文化もあります
JUnit入門/TDD入門[新人研修資料]
AAA(スリーエー)
Arrange (セットアップ)
Act (操作)
Assert(アサーション)
オブジェクトのふるまいをテストする
コードの1行1行やメソッドの一つ一つをテストしな
い
オブジェクトが想定している一連のふるまいをテスト
する
JUnit入門/TDD入門[新人研修資料]
1つの目的に特化したテスト
1つのテストケースには一つのassert文を書く
テストが失敗した時に修正箇所がすぐわかる
assertにmessage引数をつけると失敗時に表示されるの
で、複数のassertがあっても修正箇所はすぐわかる
assert失敗した時点で処理が終了するので後続のケー
スは検査されない点は注意
意味のあるテスト
1. テストクラス、テストケース、変数などに意味のあ
る名前をつける
2. 1行ずつテストするのではなく、意味のある振る舞
いになる最小の粒度でテストする
3. テストケースを見てコードの目的・ふるまい・仕様
がわかるようになる
良いユニットテスト
FIRST
Fast(迅速)
Isolate (テストを隔離する)
Repeatable(繰り返し可能)
Self-Validating(自律的検証)
Timely(適切なタイミングでテストする)
テスト対象を選ぶ
Right-BICEP
Right:結果は正しいですか?
Boundary:境界条件は適切ですか?
Inverse:逆の関係はチェックできますか?
Cross-check:別の方法を使って結果をチェックできます
か?
Performance:パフォーマンスの特性は許容範囲内ですか?
テスト対象を選ぶための問いかけ
CORRECT
Conformance:値は期待される形式に適合していますか?
Ordering:値の集合は適切な順序に並べ替えられていますか?
Range:値は最小値と最大値の範囲内にありますか?
Reference:自身が直接コントロールできない外部のコードエオ参照していません
か?
Existence:値は存在しますか?Nullやから集合ではありませんか?
Cardinality:十分な個数の値が用意されていますか?
Time:全ての出来事は一定の順序で発生しますか?
境界条件の扱い
TDD入門
TDDの目的
動作するきれいなコードを書くこと
動作するきれいなコードへ
TDDのサイクル
1. 次の目標を考える
2. その目標を示すテストを書く
3. そのテストを実行して失敗させる(Red)
4. 目的のコードを書く
5. 2で書いたテストを成功させる(Green)
6. テストが通るまでリファクタリングを行う(Refactor)
7. 1∼6を繰り返す
Red, Green, Refactor
デモ
1から100までの数をプリントするプログラムを書け。
ただし3の倍数の時は数の代わりに「Fizz」と、
5の倍数のときは「Buzz」とプリントし、
3と5両方の倍数の場合には「FizzBuzz」とプリントするこ
と
TDDのスキル
問題を小さく分割する
歩幅を える
テスト→仮実装→三角測量→実装
テスト→仮実装→実装
テスト→明白な実装
テストの構造化とリファクタリング

More Related Content

PDF
GitLab Prometheus
PDF
MakeGoodで快適なテスト駆動開発を
PDF
GitLab/GitLab.com勉強会 第2回
PDF
JUnit5とAndroidのテスト
PDF
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
PPTX
GitLabを16万8千光年ワープさせた話(改)
PDF
from old JUnit to modern JUnit
PDF
Android App Development with Gradle & Android Studio
GitLab Prometheus
MakeGoodで快適なテスト駆動開発を
GitLab/GitLab.com勉強会 第2回
JUnit5とAndroidのテスト
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLabを16万8千光年ワープさせた話(改)
from old JUnit to modern JUnit
Android App Development with Gradle & Android Studio

What's hot (20)

PDF
Algolia
PDF
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
PDF
AndroidJUnitRunner で JUnit 4 形式のテストに移行
PDF
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
PDF
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
PDF
Google I/O 2021 Flutter 全体報告
PDF
Dart / Flutter コードファイルジェネレート入門
PDF
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
PDF
超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...
PPTX
GoGoMakeDAST
PPTX
ちょっと丁寧にgitを説明する
PDF
GoによるiOSアプリの開発
PPTX
社内LT大会#3 2016-4-28 Vuls
PDF
Gitはじめの一歩
PDF
Detroit Programming City
PPTX
グリー アジャイル開発における品質保証と人材活用
PDF
新人Git/Github研修公開用スライド(その2)
PDF
Android6.0の機能まとめ 実機でサンプルを動かしてみた
PDF
What is tested by pre-launch (security) reports?
Algolia
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
AndroidJUnitRunner で JUnit 4 形式のテストに移行
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Google I/O 2021 Flutter 全体報告
Dart / Flutter コードファイルジェネレート入門
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...
GoGoMakeDAST
ちょっと丁寧にgitを説明する
GoによるiOSアプリの開発
社内LT大会#3 2016-4-28 Vuls
Gitはじめの一歩
Detroit Programming City
グリー アジャイル開発における品質保証と人材活用
新人Git/Github研修公開用スライド(その2)
Android6.0の機能まとめ 実機でサンプルを動かしてみた
What is tested by pre-launch (security) reports?
Ad

Similar to JUnit入門/TDD入門[新人研修資料] (20)

PPT
wankuma #28
PPTX
少し分かった気になるテスト駆動開発
PDF
C# から java へのプログラム移植で体験したtddの効果は?
PDF
SeasarCon 2009 White TDD
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
PPT
Sue445 Style TDD #atest_hack
PPTX
TDDをやってみた
PDF
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
PDF
『JUnit実践入門』写経・実践会 in 横浜 #2
KEY
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
PPTX
Junit4
PDF
JS開発におけるTDDと自動テストツール利用の勘所
PDF
java-ja TDD 2nd
PDF
オトナのTDD(テスト駆動開発)入門
KEY
Unit testで定時帰宅!
KEY
テスト駆動開発の導入ーペアプログラミングの学習効果ー
PDF
Agileツール適合化分科会(tddとbdd)
PDF
CodeZineAcademy TDD実践講座PR資料
PDF
テストの視点を活用した TDD アプローチの検討とその検証
PDF
テストファースト、自動テストを導入するという事について(@社内勉強会)
wankuma #28
少し分かった気になるテスト駆動開発
C# から java へのプログラム移植で体験したtddの効果は?
SeasarCon 2009 White TDD
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
Sue445 Style TDD #atest_hack
TDDをやってみた
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
『JUnit実践入門』写経・実践会 in 横浜 #2
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
Junit4
JS開発におけるTDDと自動テストツール利用の勘所
java-ja TDD 2nd
オトナのTDD(テスト駆動開発)入門
Unit testで定時帰宅!
テスト駆動開発の導入ーペアプログラミングの学習効果ー
Agileツール適合化分科会(tddとbdd)
CodeZineAcademy TDD実践講座PR資料
テストの視点を活用した TDD アプローチの検討とその検証
テストファースト、自動テストを導入するという事について(@社内勉強会)
Ad

JUnit入門/TDD入門[新人研修資料]