SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
『はじめての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ライブラリを使用で 
きる。

Contenu connexe

Tendances

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

Tendances (19)

自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化
 
JUnit入門/TDD入門[新人研修資料]
JUnit入門/TDD入門[新人研修資料]JUnit入門/TDD入門[新人研修資料]
JUnit入門/TDD入門[新人研修資料]
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
 
JUnit5とAndroidのテスト
JUnit5とAndroidのテストJUnit5とAndroidのテスト
JUnit5とAndroidのテスト
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
Javaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTipsJavaユーザに贈るJenkins 25のTips
Javaユーザに贈るJenkins 25のTips
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
 
JJUG CCC 2014 fall 「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~
JJUG CCC 2014 fall  「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~JJUG CCC 2014 fall  「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~
JJUG CCC 2014 fall 「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~
 
Jenkins導入ライブ
Jenkins導入ライブJenkins導入ライブ
Jenkins導入ライブ
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
iOSアプリ開発でもTravis CI #eytokyo
iOSアプリ開発でもTravis CI #eytokyoiOSアプリ開発でもTravis CI #eytokyo
iOSアプリ開発でもTravis CI #eytokyo
 
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
Emergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summerEmergent Design - ObLove 2009 summer
Emergent Design - ObLove 2009 summer
 

En vedette

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

En vedette (18)

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

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

CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料Yasui Tsutomu
 
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUpUnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUpkyon mm
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!Yasui Tsutomu
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告Masaki Nakagawa
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しようUnityTechnologiesJapan002
 
Coderetreat in Japan #01 Presented by MTI Ltd
Coderetreat in Japan #01 Presented by MTI LtdCoderetreat in Japan #01 Presented by MTI Ltd
Coderetreat in Japan #01 Presented by MTI LtdTakashi Takebayashi
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門陽一 滝川
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?Akira Suenami
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)seichi23
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
テストコードの定型化
テストコードの定型化テストコードの定型化
テストコードの定型化Shinichi Hirauchi
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTatsuya Ishikawa
 
TFS超入門。いつやるの。今でしょ
TFS超入門。いつやるの。今でしょTFS超入門。いつやるの。今でしょ
TFS超入門。いつやるの。今でしょTakuya Kawabe
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daikyon mm
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~Tomomi Kajita
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み慎一 古賀
 
研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイントRecruit Technologies
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入You&I
 
少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発lnial
 

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

CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUpUnitTestは最もTDDしやすいか否か? #TDDMeetUp
UnitTestは最もTDDしやすいか否か? #TDDMeetUp
 
Hey It's Not My TDD!
Hey It's Not My TDD!Hey It's Not My TDD!
Hey It's Not My TDD!
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
 
Coderetreat in Japan #01 Presented by MTI Ltd
Coderetreat in Japan #01 Presented by MTI LtdCoderetreat in Japan #01 Presented by MTI Ltd
Coderetreat in Japan #01 Presented by MTI Ltd
 
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
 
Tdd is really dead ?
Tdd is really dead ?Tdd is really dead ?
Tdd is really dead ?
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
テストコードの定型化
テストコードの定型化テストコードの定型化
テストコードの定型化
 
Test automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transitionTest automation strategy for .net core 3 transition
Test automation strategy for .net core 3 transition
 
TFS超入門。いつやるの。今でしょ
TFS超入門。いつやるの。今でしょTFS超入門。いつやるの。今でしょ
TFS超入門。いつやるの。今でしょ
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000dai
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
 
研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント
 
Caketest
CaketestCaketest
Caketest
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入
 
少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発少し分かった気になるテスト駆動開発
少し分かった気になるテスト駆動開発
 

『はじめての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ライブラリを使用で きる。