わんくま名古屋 #29 (2013/11/23) TDD道場 #17

35
わわわわわわ わわわわわわ #29 – TDD わわ #17 1/35 TDD わわ 2013 わ 11 わ 23 わ わわわわわわ わわわわわわ #29 TDD わわわわわわ ! biac わわわわ わわわわわわわわ 西

description

SkyDrive からもダウンロードできます (PowerPoint/PDF)。 http://sdrv.ms/I75CDE

Transcript of わんくま名古屋 #29 (2013/11/23) TDD道場 #17

Page 1: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 1/35

TDD 道場

2013 年 11 月 23日

わんくま同盟名古屋勉強会 #29

TDD

やってみよう !

biac

名古屋市西生涯学習センター

Page 2: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #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 年、すっかりサボってました

Page 3: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 3/35

Test

Driven

Development

テスト駆動開発

Page 4: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 4/35

TDD – テスト駆動開発

・「テスト」と言ってるけど、 TDD は品質保証テストじゃない。・「開発」と言ってるけど、 TDD は開発プロセスじゃない。

Page 5: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #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)と 呼ばれる開発のスタイルだ。」

Page 6: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #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 つのシンプルなルール

Page 7: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 7/35

TestDrivenDevelopment

= 自動化されたテストを使って  開発を駆動するスタイル

Page 8: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 8/35

大事なことなのでもう 1度

「自動化されたテスト」…を作ってからコードを書くのだ。

Page 9: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 9/35

CM

Page 10: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 10/35

TDD Advent Calendar

• http://qiita.com/advent-calendar/2013/tddadventjp/participants• 「 tdd カレンダー

2013 」でぐぐる (Bingじゃ出ない )• twitter ハッシュタグ

#TddAdventJp

Page 11: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 11/35

本日のテーマ

•ホントは 1 年前に喋らなきゃいけなかったんだ

すっかり忘れてたよ… orz

MSTest の暗黒大陸

@Windows ストア アプリVisual Studio で TDD やるとすると、

標準搭載のユニット テスト フレームワークはMSTest 。

だが、そこは……

Page 12: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 12/35

暗黒大陸

その内部がほとんど知られていないところ。

Page 13: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 13/35

暗黒大陸論より証拠。Windows ストア アプリ用のユニットテスト プロジェクトを作ってみる

Page 14: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 14/35

暗黒大陸MSTest は慣れたものですからね、

サクサク書きますよ f(^^;

たまにはヘルプを見ましょうか !?AreEqual にカーソルを置いて [F1] !

Page 17: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 17/35

暗黒大陸 VS2013 Ult. で、ストア アプリ用の MSTest

Windows ストア アプリ用の MSTest だと

AreEqual のヘルプはやっぱり無い !

Page 18: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 18/35

暗黒大陸 んなアホな !?使ってる名前空間を確認して…

Windows ストア アプリ用の MSTest で使っているのはMicrosoft.VisualStudio.TestPlatform.UnitTestFramework 名前空間

Page 19: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 19/35

暗黒大陸 何ちゃら UnitTestFramework 名前空間をMSDN で ぐぐってみる… !?

Microsoft.VisualStudio.TestPlatform.UnitTestFramework名前空間の検索結果 ⇒ このクラス ライブラリのページは無い !

Page 20: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 20/35

暗黒大陸

MSTest で使う何ちゃらUnitTestFramework 名前空間は、地図の無い世界だった !!

Page 21: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 21/35

VS2013 が出たのにいまだにドキュメントが無い !! ?となると、 Windowsストア アプリ用 MSTest

で使うライブラリーは自力で地図を

作るっきゃない !

Page 22: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 22/35

最初に残された道しるべ… ?

まったく何も手掛かりが無いわけじゃぁ ない

Page 23: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 23/35

2 つの MSTest

MSTest が使うクラス ライブラリは、2 つある。

※ VS2013 のオブジェクト ブラウザーで見てみる

従来のアプリ用

Windows ストアアプリ用

Page 24: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 24/35

1. 従来のアプリ用

MSDN にドキュメントがある

名前が同じクラスは、だいたい同じだろう f(^^;

Page 25: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 25/35

2. 無いものは無いのだ !

Windows ストア アプリ用のライブラリーに無いものは、使えないのだ ! orz

従来のアプリ用

赤色にしたクラス等は、 Windows ストア アプリ用には存在しない。

Page 26: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 26/35

Page 27: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 27/35

3. 真の秘境

Windows ストア アプリ用のライブラリーだけに存在するクラスなどは、

まさに秘境 !!

Windows ストア アプリ用

緑色にしたクラス等は、 Windows ストア アプリ用だけに存在する。 (8 ヶ所 )

Page 28: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 28/35

探検をはじめよう

Windows ストア アプリ専用のクラスの中から、まずは…

2 つ目の Assert クラス !これはいったい何なんだ !?

Page 29: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 29/35

2 つ目のAssert クラス

オブジェクト ブラウザーで見てみる

ThrowsException メソッドだけがある (3 オーバーロード ) 説明なしかよ ! orz

Page 30: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 30/35

2 つ目のAssert クラス

いろいろやってみる。メソッド名とシグネチャが頼り。

Page 31: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 31/35

1. まず、 1 つ目の Assert クラスと名前が衝突しないよう、 using でクラス名のエイリアスを切っておく。

using AppContainerAssert = Microsoft.VisualStudio.TestPlatform.UnitTestFramework .AppContainer.Assert;

※ 毎回これだけ長い名前空間を記述してもかまわないけど… w

2 つ目のAssert クラス

試行錯誤の結果、ThrowsException<T> メソッドの使い方は、たぶんこんな感じ。 (1/3)?

Page 32: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #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)?

Page 33: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #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)?

Page 34: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 34/35

俺たちの旅はまだ始まったばかりだ !!

Page 35: わんくま名古屋 #29 (2013/11/23) TDD道場 #17

わんくま同盟 名古屋勉強会 #29 – TDD 道場 #17 35/35

おしまい

まとめ・ Windows ストア アプ

リのユニット テストには、専用のプロジェクト

・そこで使えるテスティング フレームワークには、ドキュメントが無い。謎だらけ !!