View
309
Download
6
Category
Preview:
DESCRIPTION
SkyDrive からもダウンロードできます (PowerPoint/PDF)。 http://sdrv.ms/I75CDE
Citation preview
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 1/35
TDD 道場
2013 年 11 月 23日
わんくま同盟名古屋勉強会 #29
TDD
やってみよう !
biac
名古屋市西生涯学習センター
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 2/35
自己紹介• 著書– 「速攻入門 C# 」 (2012/3)
技術評論社、共著– 「ソフトな彼女とハードな彼
氏。」 (2012/3) アジャイルマインド vol.1 掲載
• 記事– 連載 「 C# で TDD 入門」
CodeZine– 週刊連載「 WinRT/Metro Tips 」
@IT - .NET 開発者中心… etc.
biac ( 山本 康彦 )
BluewaterSofthttp://www.bluewatersoft.jp/
• 名古屋大学工学部 ( 修士 )• HONDA R&D で自動車設
計• 1994 ~ ソフトウェア業
界• 2012 ~ BluewaterSoft
ソフトウェア
開発
Windows 8 Metro Style App.Windows Phone 8…Windows 系の最新技術
TDD( コーディング技法 ) の普及
著作
2013/7
すまん m(_`_)m
この 1 年、すっかりサボってました
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 3/35
Test
Driven
Development
テスト駆動開発
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 4/35
TDD – テスト駆動開発
・「テスト」と言ってるけど、 TDD は品質保証テストじゃない。・「開発」と言ってるけど、 TDD は開発プロセスじゃない。
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 5/35
TDD の考案者Kent Beck の説明
“ Test Driven Development: By Example” (2002) より。
We drive development with automated tests, a style of development called
Test-Driven Development (TDD).
「自動化されたテストを使って、 私たちは開発を駆動する。 ( それが ) テスト駆動開発 (TDD)と 呼ばれる開発のスタイルだ。」
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 6/35
具体的には ? “Test Driven Development: By Example” (2002) より。
In Test-Driven Development, we・ Write new code only if an automated test has failed・ Eliminate duplicationThese are two simple rules.
TDD では、・自動化されたテストが失敗したときだけ、 新しいコードを書く ( テストファースト )・重複を無くす ( リファクタリング )たった 2 つのシンプルなルール
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 7/35
TestDrivenDevelopment
= 自動化されたテストを使って 開発を駆動するスタイル
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 8/35
大事なことなのでもう 1度
「自動化されたテスト」…を作ってからコードを書くのだ。
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 9/35
CM
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 10/35
TDD Advent Calendar
• http://qiita.com/advent-calendar/2013/tddadventjp/participants• 「 tdd カレンダー
2013 」でぐぐる (Bingじゃ出ない )• twitter ハッシュタグ
#TddAdventJp
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 11/35
本日のテーマ
•ホントは 1 年前に喋らなきゃいけなかったんだ
すっかり忘れてたよ… orz
MSTest の暗黒大陸
@Windows ストア アプリVisual Studio で TDD やるとすると、
標準搭載のユニット テスト フレームワークはMSTest 。
だが、そこは……
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 12/35
暗黒大陸
その内部がほとんど知られていないところ。
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 13/35
暗黒大陸論より証拠。Windows ストア アプリ用のユニットテスト プロジェクトを作ってみる
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 14/35
暗黒大陸MSTest は慣れたものですからね、
サクサク書きますよ f(^^;
たまにはヘルプを見ましょうか !?AreEqual にカーソルを置いて [F1] !
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 15/35
暗黒大陸[F1] 押すと、 IE が立ち上がって…
…マテコラ!
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 16/35
暗黒大陸 VS2013 Ult. で、デスクトップ アプリ用の MSTest
こんどは Ultimate + Power Tools で。デスクトップ アプリ用の MSTest だと
AreEqual のヘルプは確かに有る !
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 17/35
暗黒大陸 VS2013 Ult. で、ストア アプリ用の MSTest
Windows ストア アプリ用の MSTest だと
AreEqual のヘルプはやっぱり無い !
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 18/35
暗黒大陸 んなアホな !?使ってる名前空間を確認して…
Windows ストア アプリ用の MSTest で使っているのはMicrosoft.VisualStudio.TestPlatform.UnitTestFramework 名前空間
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 19/35
暗黒大陸 何ちゃら UnitTestFramework 名前空間をMSDN で ぐぐってみる… !?
Microsoft.VisualStudio.TestPlatform.UnitTestFramework名前空間の検索結果 ⇒ このクラス ライブラリのページは無い !
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 20/35
暗黒大陸
MSTest で使う何ちゃらUnitTestFramework 名前空間は、地図の無い世界だった !!
?
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 21/35
VS2013 が出たのにいまだにドキュメントが無い !! ?となると、 Windowsストア アプリ用 MSTest
で使うライブラリーは自力で地図を
作るっきゃない !
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 22/35
最初に残された道しるべ… ?
まったく何も手掛かりが無いわけじゃぁ ない
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 23/35
2 つの MSTest
MSTest が使うクラス ライブラリは、2 つある。
※ VS2013 のオブジェクト ブラウザーで見てみる
従来のアプリ用
Windows ストアアプリ用
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 24/35
1. 従来のアプリ用
MSDN にドキュメントがある
名前が同じクラスは、だいたい同じだろう f(^^;
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 25/35
2. 無いものは無いのだ !
Windows ストア アプリ用のライブラリーに無いものは、使えないのだ ! orz
従来のアプリ用
赤色にしたクラス等は、 Windows ストア アプリ用には存在しない。
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 26/35
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 27/35
3. 真の秘境
Windows ストア アプリ用のライブラリーだけに存在するクラスなどは、
まさに秘境 !!
Windows ストア アプリ用
緑色にしたクラス等は、 Windows ストア アプリ用だけに存在する。 (8 ヶ所 )
?
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 28/35
探検をはじめよう
Windows ストア アプリ専用のクラスの中から、まずは…
2 つ目の Assert クラス !これはいったい何なんだ !?
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 29/35
2 つ目のAssert クラス
オブジェクト ブラウザーで見てみる
ThrowsException メソッドだけがある (3 オーバーロード ) 説明なしかよ ! orz
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 30/35
2 つ目のAssert クラス
いろいろやってみる。メソッド名とシグネチャが頼り。
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 31/35
1. まず、 1 つ目の Assert クラスと名前が衝突しないよう、 using でクラス名のエイリアスを切っておく。
using AppContainerAssert = Microsoft.VisualStudio.TestPlatform.UnitTestFramework .AppContainer.Assert;
※ 毎回これだけ長い名前空間を記述してもかまわないけど… w
2 つ目のAssert クラス
試行錯誤の結果、ThrowsException<T> メソッドの使い方は、たぶんこんな感じ。 (1/3)?
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 32/35
2. ThrowsException<T> メソッドのシグネチャ
public static Task<ExpectedException> //返値 : 発生した例外 ThrowsException<ExpectedException>( //型 : 想定される例外 Func<Task> action, //引数 1: テスト対象の非同期メソッド string message, //引数 2: 不合格時に出すメッセージ params object[] parameters //引数 3: ……不明 orz)where ExpectedException : Exception;
2 つ目のAssert クラス
試行錯誤の結果、ThrowsException<T> メソッドの使い方は、たぶんこんな感じ。 (2/3)?
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 33/35
3. ThrowsException<T> メソッドの使用例[TestMethod]public async Task Test_想定通りの例外が出れば合格 () { var resultEx = await AppContainerAssert.ThrowsException <InvalidOperationException>( () => TestTargetMethod("INVALIDOP"), "想定した例外が出なかったよ !!" );
// 出てきた例外のチェックも可能 Assert.AreEqual<string>("例外のメッセージだよ ", resultEx.Message);}
2 つ目のAssert クラス
試行錯誤の結果、ThrowsException<T> メソッドの使い方は、たぶんこんな感じ。 (3/3)?
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 34/35
俺たちの旅はまだ始まったばかりだ !!
?
わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 35/35
おしまい
まとめ・ Windows ストア アプ
リのユニット テストには、専用のプロジェクト
・そこで使えるテスティング フレームワークには、ドキュメントが無い。謎だらけ !!
Recommended