TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料

Preview:

DESCRIPTION

TDD Boot Camp Tokyo for c++ 2014-01 でデモした際の課題(FizzBuzz)とそのためのVisual Studioのプロジェクトの作成方法を記した資料です

Citation preview

TDD Boot Camp Tokyo for C++ 2014-01 デモ

@imagire

• お題説明 • 環境説明 • 作業手順

お品書き

• FizzBuzz – 1から100までの数字を数える

• 3でも5でも割り切れる数字の際は “Fizz Buzz” • 3で割り切れる数字の際は “Fizz” • 5で割り切れる数字の際は “Buzz” • それ以外は数字をそのまま発言

– 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, …

お題説明

Microsoft 単体テストフレームワーク

アプリケーション

.exe

Microsoft 単体テストフレームワーク

アプリケーション

.exe .lib

コアロジック

.dll

単体テスト プロジェクト

呼び出し

応答

応答

呼び出し

テスト対象のクラスは ライブラリとして呼び出せる形にしてテスト

Visual Studio から 呼べる!

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

• 最終出力だけを比較するのは不適当そう – 表示結果 = ” 1, 2, Fizz, 4, …, 98, Fizz, Buzz” ?

• まちがえそうもないところはテスト対象としない – 単純な固定回数の loop のカウントは優先度低

方針の検討

for (int i = 1; i <= 100; i++){ string result = FizzBuzz::Calc(i); cout << result; }

こんな関数のテストが適当そう

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

Win32 コンソール アプリケーションの作成

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

ネイティブ単体テスト プロジェクトの追加

テストっぽいプロジェクト名を付けよう

テスト エクスプローラーを開けてみよう

テストの実行

テストコードを編集してみる

実行されるテスト関数

実行されるテストが置かれるクラス

失敗するテストコードの作成

失敗してみる

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

ライブラリっぽいプロジェクト名を付けよう

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

テストコードを開いた状態でプロパティの設定と選択

共通プロパティで参照の追加

テストプロジェクトの参照にライブラリのプロジェクトを追加 (ライブラリが更新されるとテストのプロジェクトもビルドしなおす)

構成プロパティからインクルードディレクトリの追加

この後で作成するプロジェクトのインクルードフォルダ

ライブラリディレクトリも追加

インクルードディレクトリの作成

その中にヘッダの作成

テストされるクラスのヘッダーファイルを置く

最低限の実装を行う

テストが通るのを確認

リファクタリング (実装コードをcppファイルに書く)

ライブラリプロジェクトを右クリックしてファイルの追加

ライブラリプロジェクトにもパスを通す

テストプロジェクトと同じパスを追加

コードを書きかえる

テスト結果に変更がないことを確認

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

アプリケーションプロジェクトにも ライブラリの情報を追加

ライブラリの参照の追加

インクルードディレクトリの追加

ライブラリの追加

リンカーの入力にライブラリを追加

アプリケーションコードの作成

アプリケーションの実行

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

テストコードの追加

テストの失敗を確認

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

テストが通る実装を行う

やりすぎかも? 3の時だけ特別な値を返すような実装を 最初はした方が良いかもね

テストが通ることを確認

アプリケーションも実行

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

テストコードの追加

テストコードの失敗の確認

コードの修正

テストが通ることの確認

アプリケーションも確認

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

テストコードの追加

テストコードの失敗の確認

コードの修正

テストが通ることの確認

アプリケーションも実行

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

コードをきれいにする

テストコードもきれいにする

• アプリケーションを作成 • テストプロジェクトを追加 • ライブラリのプロジェクトを追加 • テストプロジェクトとライブラリを紐づけ • アプリケーションとライブラリを紐づけ • TDDのループを回す

– テストを書く – テストが成功するように実装 – リファクタリング

進め方

テストコードの追加

テストコードの失敗の確認

コードの修正

アプリケーションの確認

気になるところはテスト

気になるところまでokなら完了