SlideShare a Scribd company logo
『はじめてのClojure』勉強会#3 
第7章:テスト、テスト、テスト 
2014/9/7(日) 
@makopi23
2 
 7.1 テスト駆動開発 (1/2) 
 テスト駆動開発とは 
実装の前に「テスト・コード」を書き、その「テスト・コード」 
が正しく動作するように実装を書く、という開発手法。 
TDD (Test Driven Development)と呼ばれる。 
 【ご参考】 
7章を写経したコードをGitHubにアップしました。 
https://github.com/makopi23/BeginningClojure
3 
出典: Test Yourself 
- テストを書くと何がどう変わるか by 和田卓人 
http://www.slideshare.net/t_wada/jasst-2014-hokkaidotwadatdd
4 
出典: Test Yourself 
- テストを書くと何がどう変わるか by 和田卓人 
http://www.slideshare.net/t_wada/jasst-2014-hokkaidotwadatdd
5 
 7.1 テスト駆動開発 (2/2) 
 テスト駆動開発の利点 
想定外の理由でプログラムが動かなくなった、などの検 
知が容易になり、コードの品質を保ってくれる。 
要件に変更があっても、一度書いたテスト・コードがあれ 
ば、安心してコードを弄ることができる。 
 Clojureにおけるテスト 
「clojure.test」ネーム・スペースに、標準でテストのための 
関数が用意されている。
6 
 7.2 「clojure.test」を使ったテスト (1/8) 
 「テスト・コード」を配置する位置 
「Leiningen」で作成したプロジェクトであれば、あらかじめ 
「test」ディレクトリが作成済みなので、そこに配置する。 
 テスト用の「ネーム・スペース」 
・テスト対象のネーム・スペース (テスト対象ファイル) 
hoge.fuga (src/hoge/fuga.clj) 
・テスト・コードを置くネーム・スペース (テストコード) 
hoge.test.fuga (test/hoge/test/fuga.clj)
7 
 7.2 「clojure.test」を使ったテスト (2/8) 
 「郵便番号だと真を返す関数」のテスト駆動開発 
Leiningenで「postcode2」というプロジェクトを作成する 
と、testディレクトリにテストのひな形が用意される。
8 
 7.2 「clojure.test」を使ったテスト (3/8) 
 「Leiningen」経由でのテスト 
「lein test」コマンドでテストを実行すると、正しく失敗する
9 
 7.2 「clojure.test」を使ったテスト (4/8) 
 valid-postcode?-test関数の作成
10 
 7.2 「clojure.test」を使ったテスト (5/8) 
 valid-postcode?-test関数の実行 
「valid-postcode?」関数が無いためエラー発生。
11 
 7.2 「clojure.test」を使ったテスト (6/8) 
 valid-postcode?関数の定義 
src/postcode2/core.cljにvalid-postcode?関数を定義 
 #"^d{3}-d{4}$" は正規表現 
- 文字列の最初は3桁の数字。 
- その後「ハイフン」がある。 
- さらにその後4桁の「数字」。
12 
 7.2 「clojure.test」を使ったテスト (7/8) 
 再テスト 
「lein test」コマンドで再度テストを走らせてみる。 
すると、一箇所だけテストに失敗する。 
引数にnilが渡されNullPointerExceptionが発生している。
13 
 7.2 「clojure.test」を使ったテスト (8/8) 
 nilをre-findの前で弾くようにvalid-postcode?関数を修正 
再度テストを試すと、テストが成功する。
14 
 7.3 Ringアプリケーションのテスト (1/3) 
 handlerに対して疑似的なリクエストを投げて、その応答 
が正しいかをチェックする。 
 そのため、疑似的なリクエストを投げるRing-Mockライブ 
ラリを使用する。 
 project.cljの「:profile」シンボルのマップに追加 
 「ring.mock.request」ネーム・スペースが利用できるよう 
になり、その中の「request」関数でテストできる。 
(handler (reuest :get “/”))
15 
 7.3 Ringアプリケーションのテスト (2/3) 
 「Compojure」テンプレートを使ってLeigingenプロジェクト 
を作成すると、自動で作成されるテストファイル
16 
 7.3 Ringアプリケーションのテスト (3/3) 
 「lein test」コマンドでテスト実行 
 「lein ring server」コマンドでWebアプリを起動
17 
 まとめ 
 テスト駆動開発とは 
実装の前に「テスト・コード」を書き、その「テスト・コード」が 
正しく動作するように実装を書く、という開発手法。 
TDD (Test Driven Development)と呼ばれる。 
 Clojureにおけるテスト 
「clojure.test」ネーム・スペースに標準で用意されている、テ 
ストのための関数を使用する。 
 Ringerアプリケーションのテスト 
疑似的なリクエストを投げるRing-Mockライブラリを使用で 
きる。

More Related Content

What's hot (19)

PDF
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
aha_oretama
 
PDF
テスト駆動開発の進化
Yukei Wachi
 
PDF
JUnit入門/TDD入門[新人研修資料]
Ryuhei Ishibashi
 
PDF
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
Hiroyuki Ohnaka
 
PDF
JUnit5とAndroidのテスト
Hiroshi Kikuchi
 
PDF
java-ja TDD 2nd
Takuto Wada
 
PDF
SeasarCon 2009 White TDD
Takuto Wada
 
PDF
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
PDF
自動テストの誤解とアンチパターン in 楽天 Tech Talk
kyon mm
 
PDF
Javaユーザに贈るJenkins 25のTips
Masanori Satoh
 
PDF
Dependency injection
Yuki Matsumura
 
KEY
Androidリリース作業の効率化(2)
Kenichi Kambara
 
PDF
JJUG CCC 2014 fall 「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~
Hiroyuki Ohnaka
 
ODP
Jenkins導入ライブ
Hiasyoshi Suehiro
 
PDF
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
PDF
iOSアプリ開発でもTravis CI #eytokyo
Koji Hasegawa
 
PDF
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
 
PDF
ぼくのかんがえた iOSテスト戦略
Naoki Umehara
 
PDF
Emergent Design - ObLove 2009 summer
Takuto Wada
 
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
aha_oretama
 
テスト駆動開発の進化
Yukei Wachi
 
JUnit入門/TDD入門[新人研修資料]
Ryuhei Ishibashi
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
Hiroyuki Ohnaka
 
JUnit5とAndroidのテスト
Hiroshi Kikuchi
 
java-ja TDD 2nd
Takuto Wada
 
SeasarCon 2009 White TDD
Takuto Wada
 
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
kyon mm
 
Javaユーザに贈るJenkins 25のTips
Masanori Satoh
 
Dependency injection
Yuki Matsumura
 
Androidリリース作業の効率化(2)
Kenichi Kambara
 
JJUG CCC 2014 fall 「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~
Hiroyuki Ohnaka
 
Jenkins導入ライブ
Hiasyoshi Suehiro
 
Getting Started with Testing using PHPUnit
Atsuhiro Kubo
 
iOSアプリ開発でもTravis CI #eytokyo
Koji Hasegawa
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
 
ぼくのかんがえた iOSテスト戦略
Naoki Umehara
 
Emergent Design - ObLove 2009 summer
Takuto Wada
 

Viewers also liked (18)

PDF
スクラムの知られざる勘所
Yoshifumi Tsuda
 
PDF
【6章】アジャイルサムライ お題
Akio Terayama
 
PDF
Scalaでの例外処理
Takashi Kawachi
 
KEY
Clojure + MongoDB on Heroku
Naoyuki Kakuda
 
PDF
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
 
KEY
Clojure入門
Naoyuki Kakuda
 
PDF
ClojureでElectronアプリを作ろう
Kazuhiro Hara
 
PDF
Clojure Language Update (2015)
sohta
 
PDF
なぜアジャイル開発はうまくいかないのか #xpjug
Yoshihito Kuranuki
 
PDF
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
 
PDF
例外設計における大罪
Takuto Wada
 
PDF
プログラミング言語Clojureのニャンパスでの活用事例
sohta
 
PDF
入門Transducers
sohta
 
PDF
From Java To Clojure
Kent Ohashi
 
PDF
XP祭り2014「アジャイルを手放して得られたこと」
Yusuke Suzuki
 
PDF
キメるClojure
Yoshitaka Kawashima
 
PDF
会社でClojure使ってみて分かったこと
Recruit Technologies
 
PDF
高速!Clojure Web 開発入門
Kazuki Tsutsumi
 
スクラムの知られざる勘所
Yoshifumi Tsuda
 
【6章】アジャイルサムライ お題
Akio Terayama
 
Scalaでの例外処理
Takashi Kawachi
 
Clojure + MongoDB on Heroku
Naoyuki Kakuda
 
【アジャイルサムライ】6章_ユーザストーリーを集める
Akio Terayama
 
Clojure入門
Naoyuki Kakuda
 
ClojureでElectronアプリを作ろう
Kazuhiro Hara
 
Clojure Language Update (2015)
sohta
 
なぜアジャイル開発はうまくいかないのか #xpjug
Yoshihito Kuranuki
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
 
例外設計における大罪
Takuto Wada
 
プログラミング言語Clojureのニャンパスでの活用事例
sohta
 
入門Transducers
sohta
 
From Java To Clojure
Kent Ohashi
 
XP祭り2014「アジャイルを手放して得られたこと」
Yusuke Suzuki
 
キメるClojure
Yoshitaka Kawashima
 
会社でClojure使ってみて分かったこと
Recruit Technologies
 
高速!Clojure Web 開発入門
Kazuki Tsutsumi
 
Ad

Similar to 『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト (20)

PDF
TDD with RDD: Clojure/LispのREPLで変わる開発体験
Kent Ohashi
 
PDF
エクストリームエンジニア4
T-arts
 
PPTX
少し分かった気になるテスト駆動開発
lnial
 
PPT
wankuma #28
高見 知英
 
PDF
Tddのすゝめ
将 高野
 
PDF
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
 
PDF
C# から java へのプログラム移植で体験したtddの効果は?
Shinichi Hirauchi
 
PPTX
TDDをやってみた
Yuta Kawadai
 
PDF
TDDってなんなの?(What is TDD)
seichi23
 
PDF
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
 
PDF
「TDDはじめて物語」 #tddbc
Hiroyuki Ohnaka
 
PPTX
Junit4
ichikaz3
 
PDF
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
Yohei Onishi
 
PPT
Sue445 Style TDD #atest_hack
Go Sueyoshi (a.k.a sue445)
 
PDF
テスト駆動開発を継続する
irof N
 
PDF
ゆるLTのススメ+α
joker1007
 
PDF
pytest × TDD テスト駆動開発のススメ
iRidge, Inc.
 
KEY
Unit testで定時帰宅!
Funato Takashi
 
PDF
『JUnit実践入門』写経・実践会 in 横浜 #2
shinyaa31
 
TDD with RDD: Clojure/LispのREPLで変わる開発体験
Kent Ohashi
 
エクストリームエンジニア4
T-arts
 
少し分かった気になるテスト駆動開発
lnial
 
wankuma #28
高見 知英
 
Tddのすゝめ
将 高野
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
Tomomi Kajita
 
C# から java へのプログラム移植で体験したtddの効果は?
Shinichi Hirauchi
 
TDDをやってみた
Yuta Kawadai
 
TDDってなんなの?(What is TDD)
seichi23
 
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
 
「TDDはじめて物語」 #tddbc
Hiroyuki Ohnaka
 
Junit4
ichikaz3
 
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
Yohei Onishi
 
Sue445 Style TDD #atest_hack
Go Sueyoshi (a.k.a sue445)
 
テスト駆動開発を継続する
irof N
 
ゆるLTのススメ+α
joker1007
 
pytest × TDD テスト駆動開発のススメ
iRidge, Inc.
 
Unit testで定時帰宅!
Funato Takashi
 
『JUnit実践入門』写経・実践会 in 横浜 #2
shinyaa31
 
Ad

『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト

  • 2. 2  7.1 テスト駆動開発 (1/2)  テスト駆動開発とは 実装の前に「テスト・コード」を書き、その「テスト・コード」 が正しく動作するように実装を書く、という開発手法。 TDD (Test Driven Development)と呼ばれる。  【ご参考】 7章を写経したコードをGitHubにアップしました。 https://github.com/makopi23/BeginningClojure
  • 3. 3 出典: Test Yourself - テストを書くと何がどう変わるか by 和田卓人 http://www.slideshare.net/t_wada/jasst-2014-hokkaidotwadatdd
  • 4. 4 出典: Test Yourself - テストを書くと何がどう変わるか by 和田卓人 http://www.slideshare.net/t_wada/jasst-2014-hokkaidotwadatdd
  • 5. 5  7.1 テスト駆動開発 (2/2)  テスト駆動開発の利点 想定外の理由でプログラムが動かなくなった、などの検 知が容易になり、コードの品質を保ってくれる。 要件に変更があっても、一度書いたテスト・コードがあれ ば、安心してコードを弄ることができる。  Clojureにおけるテスト 「clojure.test」ネーム・スペースに、標準でテストのための 関数が用意されている。
  • 6. 6  7.2 「clojure.test」を使ったテスト (1/8)  「テスト・コード」を配置する位置 「Leiningen」で作成したプロジェクトであれば、あらかじめ 「test」ディレクトリが作成済みなので、そこに配置する。  テスト用の「ネーム・スペース」 ・テスト対象のネーム・スペース (テスト対象ファイル) hoge.fuga (src/hoge/fuga.clj) ・テスト・コードを置くネーム・スペース (テストコード) hoge.test.fuga (test/hoge/test/fuga.clj)
  • 7. 7  7.2 「clojure.test」を使ったテスト (2/8)  「郵便番号だと真を返す関数」のテスト駆動開発 Leiningenで「postcode2」というプロジェクトを作成する と、testディレクトリにテストのひな形が用意される。
  • 8. 8  7.2 「clojure.test」を使ったテスト (3/8)  「Leiningen」経由でのテスト 「lein test」コマンドでテストを実行すると、正しく失敗する
  • 9. 9  7.2 「clojure.test」を使ったテスト (4/8)  valid-postcode?-test関数の作成
  • 10. 10  7.2 「clojure.test」を使ったテスト (5/8)  valid-postcode?-test関数の実行 「valid-postcode?」関数が無いためエラー発生。
  • 11. 11  7.2 「clojure.test」を使ったテスト (6/8)  valid-postcode?関数の定義 src/postcode2/core.cljにvalid-postcode?関数を定義  #"^d{3}-d{4}$" は正規表現 - 文字列の最初は3桁の数字。 - その後「ハイフン」がある。 - さらにその後4桁の「数字」。
  • 12. 12  7.2 「clojure.test」を使ったテスト (7/8)  再テスト 「lein test」コマンドで再度テストを走らせてみる。 すると、一箇所だけテストに失敗する。 引数にnilが渡されNullPointerExceptionが発生している。
  • 13. 13  7.2 「clojure.test」を使ったテスト (8/8)  nilをre-findの前で弾くようにvalid-postcode?関数を修正 再度テストを試すと、テストが成功する。
  • 14. 14  7.3 Ringアプリケーションのテスト (1/3)  handlerに対して疑似的なリクエストを投げて、その応答 が正しいかをチェックする。  そのため、疑似的なリクエストを投げるRing-Mockライブ ラリを使用する。  project.cljの「:profile」シンボルのマップに追加  「ring.mock.request」ネーム・スペースが利用できるよう になり、その中の「request」関数でテストできる。 (handler (reuest :get “/”))
  • 15. 15  7.3 Ringアプリケーションのテスト (2/3)  「Compojure」テンプレートを使ってLeigingenプロジェクト を作成すると、自動で作成されるテストファイル
  • 16. 16  7.3 Ringアプリケーションのテスト (3/3)  「lein test」コマンドでテスト実行  「lein ring server」コマンドでWebアプリを起動
  • 17. 17  まとめ  テスト駆動開発とは 実装の前に「テスト・コード」を書き、その「テスト・コード」が 正しく動作するように実装を書く、という開発手法。 TDD (Test Driven Development)と呼ばれる。  Clojureにおけるテスト 「clojure.test」ネーム・スペースに標準で用意されている、テ ストのための関数を使用する。  Ringerアプリケーションのテスト 疑似的なリクエストを投げるRing-Mockライブラリを使用で きる。