SlideShare une entreprise Scribd logo
1  sur  77
Télécharger pour lire hors ligne
JUnitを使ったJavaのテスト入門
@megascus
13年6月20日木曜日
•名前: 久保 智
•twitter id: @megascus
•JJUG幹事
•JJUG幹事募集中です!
自己紹介
13年6月20日木曜日
注意
13年6月20日木曜日
本日はJava初心者向けです
13年6月20日木曜日
高度な内容はでてきません
13年6月20日木曜日
アジェンダ
•なぜJUnitを使うのか
•JUnitの使い方
•JUnitを効果的に使うために
13年6月20日木曜日
アジェンダ
•なぜJUnitを使うのか
•JUnitの使い方
•JUnitを効果的に使うために
13年6月20日木曜日
なぜJUnitを使うのか
13年6月20日木曜日
動かない時の確認方法
13年6月20日木曜日
どうしていますか?
13年6月20日木曜日
デバッグプリント
13年6月20日木曜日
System.out.println()
13年6月20日木曜日
デバッグプリント
public void doSomething (Human human) {
System.out.println(human.getFamillyName());
//変数の中に何が入ってるのかを
//標準出力に出力する
}
13年6月20日木曜日
デバッカー
13年6月20日木曜日
動いているプログラムに
介入する
13年6月20日木曜日
デバッカー
13年6月20日木曜日
よくやる(はず)
13年6月20日木曜日
これらの問題点
13年6月20日木曜日
記録・再生ができない
13年6月20日木曜日
問題点
•テストした結果を他の人が簡単に参照することが出来
ない。(画面キャプチャとかとれば出来る)
•もう一度テストしたいときは、改めて人間が操作しな
いといけない。(あらためてデバッグする)
13年6月20日木曜日
ここで考えて下さい
13年6月20日木曜日
本当に問題ですか?
13年6月20日木曜日
本当に問題ですか?
•一回動いたら動かなくなること無いから最初に一回だ
け確認すればいいよね。
13年6月20日木曜日
そんなことはないです
13年6月20日木曜日
例えばWindows
13年6月20日木曜日
例えばWindows
http://www.theverge.com/2012/7/4/3136851/windows-logo-backwards-evolution
13年6月20日木曜日
例えばWindows
•数年に一度のメジャーアップデート(XPとかVistaとか
7とか8とか)
•それより短い期間でのサービスパック(SP1とかSP2と
か)
•毎月のセキュリティパッチ
13年6月20日木曜日
動かなくなった例
http://itpro.nikkeibp.co.jp/article/NEWS/20130416/471121/
13年6月20日木曜日
ここでソフトウェアについて
13年6月20日木曜日
ソフトウェア
•一度リリースしたソフトウェアを更新しないで済むこ
とはあまりない
•最近のソフトウェアは複雑なので、修正した内容がど
こに影響を与えるか判りにくい
•更新後にすでにある機能が動作するかを確認すること
(回帰テスト)は必須
13年6月20日木曜日
回帰テスト
13年6月20日木曜日
回帰テスト
•ソフトウェアプログラムに変更を加えた際、それに
よって新たな不具合が起きていないかを検証するテス
トのこと
•今までのテストをやり直すため、人手でやるとすごい
時間がかかる
•一ヶ月単位のリリースだと、毎月回帰テストが必要で
大変
13年6月20日木曜日
ここまで説明した上で
13年6月20日木曜日
JUnitができることは何か
13年6月20日木曜日
JUnitができること
•特定のメソッドの引数と戻り値が期待された値と同じ
かを確認するプログラムを書くことができる
13年6月20日木曜日
なぜJUnitを使うのか
13年6月20日木曜日
なぜJUnitを使うのか
•テストした内容を記録・再生するため
•いつでも再生できるようにしておくことで、デグレー
ド(元々動いた機能が動かなくなること)を防ぎやすく
なる
•回帰テストの自動化
13年6月20日木曜日
なぜJUnitを使うのか
•人手でやることを機械が勝手にやってくれるようにな
れば楽ですよね
13年6月20日木曜日
逆にJUnitを使わない場合
•使い捨てソフトウェア
•数年に一度しかリリースされないソフトウェア
•JUnitでやりたい内容を人力でがんばる場合
13年6月20日木曜日
アジェンダ
•なぜJUnitを使うのか
•JUnitの使い方
•JUnitを効果的に使うために
13年6月20日木曜日
JUnitの使い方
13年6月20日木曜日
JUnitの入手方法
13年6月20日木曜日
IDE使ってれば
すでに入ってます
※Eclipse、NetBeans、IntelliJなど
13年6月20日木曜日
JUnitができること
13年6月20日木曜日
JUnitができること
•特定のメソッドの引数と戻り値が期待された値と同じ
かを確認するプログラムを書くことができる
13年6月20日木曜日
JUnitを実際に書いてみる
※ここから先はEclipseでやってみます
13年6月20日木曜日
テスト対象を書く
(Math.java)
13年6月20日木曜日
右クリックから
JUnit Test Caseを選択
13年6月20日木曜日
そのままnextを押す
13年6月20日木曜日
テストしたいメソッドを
選択してFinish
13年6月20日木曜日
初回はライブラリを
追加するか聞かれるのでOK
13年6月20日木曜日
テストのテンプレート完成
13年6月20日木曜日
テストのライブラリを
インポート
13年6月20日木曜日
テスト対象メソッドに
@Testアノテーション
13年6月20日木曜日
動かしてみる
作成したテストクラスを右クリックして
Run AsからJUnitTestを選択するだけ
13年6月20日木曜日
動いた
けれども失敗
13年6月20日木曜日
failメソッドは
テストを失敗させる
13年6月20日木曜日
テストを成功させる
13年6月20日木曜日
テストを成功させる
13年6月20日木曜日
テストを失敗させる(2)
13年6月20日木曜日
テストを失敗させる(2)
なぜ失敗したのかのメッセージがでる
13年6月20日木曜日
assertEquals(expected, actual)
•expected(推定した値)がactual(実際の値)と等しけれ
ばテストが成功、等しくなければ失敗
•JUnitに慣れるまではこれを書くのがお仕事になる
13年6月20日木曜日
今までのを並べてみる
13年6月20日木曜日
(補足)Exceptionのテスト
13年6月20日木曜日
JUnitの使い方
•IDEが適当にテンプレートを作ってくれるので細かい
書き方は覚えなくてもOK
•基本はassertEquals
•Exceptionが発生するかは@Test(expected=〜)
13年6月20日木曜日
アジェンダ
•なぜJUnitを使うのか
•JUnitの使い方
•JUnitを効果的に使うために
13年6月20日木曜日
JUnitを効果的に使うために
13年6月20日木曜日
JUnitの高度な使い方を
学びたいなら
ここからCMです。ただし、登壇者にはお金は入ってこない
13年6月20日木曜日
JUnit実践入門
JUnitのしっかりとした書
き方を知りたいなら。
JUnitの書き方の最適化か
らJUnitを使ったテストの
自動化まで。
Javaプログラマのみなさ
ま必須の品です。
http://goo.gl/P8Bph
13年6月20日木曜日
実践テスト駆動開発
JUnitを開発手法のメイン
にしてみた。
テストを設計ととらえ
て、テストと実装を交互
に行うことでバグの発生
率を格段に下げることの
出来る開発手法、テスト
駆動開発に関する本。
http://goo.gl/3O4UE
13年6月20日木曜日
テスト駆動開発
13年6月20日木曜日
バグが半分以下に
なることで有名です
13年6月20日木曜日
http://www.slideshare.net/t_wada/tddbc-fukuoka-day1
13年6月20日木曜日
そんなTDDが学べるイベント
13年6月20日木曜日
TDDBC
テスト駆動開発ブートキャンプ
13年6月20日木曜日
次回、7月楽天タワーにて
Comming soon....
http://devtesting.jp/tddbc/
ただし、登壇者とは関係がありません。参加者として参加してるかもしれない。
13年6月20日木曜日
以上
ありがとうございました
13年6月20日木曜日

Contenu connexe

Tendances

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する増田 亨
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring増田 亨
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころJunya Hayashi
 
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]Koichiro Matsuoka
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界Y Watanabe
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyYasuharu Nakano
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門増田 亨
 

Tendances (20)

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 

Plus de Satoshi Kubo

Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations Satoshi Kubo
 
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらいSatoshi Kubo
 
できる!Pmdカスタマイズ
できる!Pmdカスタマイズできる!Pmdカスタマイズ
できる!PmdカスタマイズSatoshi Kubo
 
Javaの速度比較
Javaの速度比較Javaの速度比較
Javaの速度比較Satoshi Kubo
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)Satoshi Kubo
 
テストって何がしたいんですか?
テストって何がしたいんですか?テストって何がしたいんですか?
テストって何がしたいんですか?Satoshi Kubo
 
Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Satoshi Kubo
 
泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUGSatoshi Kubo
 
Advent calendarを作ってみた
Advent calendarを作ってみたAdvent calendarを作ってみた
Advent calendarを作ってみたSatoshi Kubo
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scalaSatoshi Kubo
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたSatoshi Kubo
 
金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjp金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjpSatoshi Kubo
 
JavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjpJavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjpSatoshi Kubo
 

Plus de Satoshi Kubo (15)

Jakarta CDI 4.0
Jakarta CDI 4.0Jakarta CDI 4.0
Jakarta CDI 4.0
 
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
Jakarta EE/MicroProfileの世界をひろげるRed Hat Application Fundations
 
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
2022年7月JJUGナイトセミナー「Jakarta EE特集」MicroProfile あらためてのおさらい
 
今のJava
今のJava今のJava
今のJava
 
できる!Pmdカスタマイズ
できる!Pmdカスタマイズできる!Pmdカスタマイズ
できる!Pmdカスタマイズ
 
Javaの速度比較
Javaの速度比較Javaの速度比較
Javaの速度比較
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)
 
テストって何がしたいんですか?
テストって何がしたいんですか?テストって何がしたいんですか?
テストって何がしたいんですか?
 
Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎Strutsから移行する人のためのjsf基礎
Strutsから移行する人のためのjsf基礎
 
泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG泥沼の中のパフォーマンスチューニング #JJUG
泥沼の中のパフォーマンスチューニング #JJUG
 
Advent calendarを作ってみた
Advent calendarを作ってみたAdvent calendarを作ってみた
Advent calendarを作ってみた
 
Java ee6 with scala
Java ee6 with scalaJava ee6 with scala
Java ee6 with scala
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
 
金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjp金魚本に載ってないJpqlの話 #glassfishjp
金魚本に載ってないJpqlの話 #glassfishjp
 
JavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjpJavaEE6 First Application #glassfishjp
JavaEE6 First Application #glassfishjp
 

Junitを使ったjavaのテスト入門