2009/12/27

C# PrivateAccesserを使ってみるよ

こないだTDDBootCampで、プライベートの関数に直アクセスできるという
素敵な機能の話があって、Twitterにて、

「そいつは、プライベートアクセサーっていうんだぜ!」(一部誇張)

ということを教えてもらったので、こいつぁ試してみるかと。

使い方を調べてみると、ちゃんとMSDNにつながるのね

http://msdn.microsoft.com/ja-jp/library/bb385974.aspx
http://msdn.microsoft.com/ja-jp/library/ms184807.aspx
(MSDNもかっこよくなっとる・・・)

といっても、ちょっっと試してみただけなんだけど簡単に使えるのね。

最初、プロキシクラスが とか 中継してくれるとか、
いろいろ手続き処理を書きながら呼ぶのかと思ったら、
実際のやり方は非常に簡単で、テスト元のクラスを作ってから、
クラスのコードの中で右クリック(コンテキストメニュー)から、
単体テストの作成を選ぶだけ

クラスを指定してやれば、すべてのメソッドについて作ってくれるし
メソッド名を指定すれば、そのメソッドだけ作ることも可能

どれを生成するかは、メニューを出すとき、もしくは、その後に
表示されるダイアログで、必要なものにチェックいれると
自動で生成してくれるという簡単さ。

image 

自動生成されるコードには、TODOが書かれてるので、
簡単な関数であれば、そのとおり書いていけば単体テストの完成なのかな。

同じこと2回やると、XxxxxTest1みたいに数字がついて生成されちゃうので
気を付ける。(上書きでの生成はしない)

自動生成のコードは、引数用の変数が自動生成される
(引数名そのままの変数)ので、そこの値にテスト用の値、
expectedに予想される結果の値を入れれば、
メソッドのテストが完成する。

戻り値なしの場合は

Assert.Inconclusive("値を返さないメソッドは確認できません。");

って自動生成されるので、例外を受け取るように自分で
ExpectedException を追加する必要がある。

さて、自分の思ったところは、

TDDの場合は、テスト –> 関数の本体のみ実装 –> Red –> Green

と思ってたので少し流れが違うのかな・・・

自動生成だと、ユーザーが実際に使うに対してというよりは、
メソッドの動作を確認するっていう観点のテストになるので

リファクタリングとかで、共通化する部分が出てきて
そこを切り出すときに、関数単体のテストもしといたほうがいいな~って
思ったら、テストの自動生成の出番かな
(関数がprivateなら、プライベートアクセサーだなw)

試しにFizzBuzzで試したコードがあるけど、どこにおくかいまいち決めらんないので
要望があれば出すことにしようw

0 件のコメント:

コメントを投稿