Yasuo's Notebook

ソフトウェア開発の話題が中心の備忘録です。

Pexを用いたテスト生成の紹介

Pexというツールをご存じでしょうか?
PexはMicrosoft Researchが提供しているツールで、学習、研究目的であれば無料で、商用目的であればMSDNのSubscriptionで提供されています。
詳細は、http://research.microsoft.com/en-us/projects/pex/

Pexは、.NETのソースコードを解析してテストコードを自動生成してくれます。

今回は、MSDNのSubscriptionで提供されているPexが導入されている前提での説明になります。
OpenCoverの例で作成したOpenCoverSampleプロジェクトで試してみましょう。
まず、ソリューションエクスプローラでプロジェクトを選択し、コンテキストメニューのPexというメニューの下の「Create Perameterized Unit Tests」を選択します。

f:id:yasuo99:20120104202212j:plain

選択すると、設定画面が出てきます。ここでは、解析対象のフィルタ指定ができますが今回はフィルタ指定無しなので空白で良いです。
デフォルトを選択して進めていくと、Pexがテストプロジェクトを生成します。

次にPexが作成したプロジェクトを選択し、コンテキストメニューの「Run Pex Exploration」を実行します。
すると、Pexがテストケースを生成、実行します。

f:id:yasuo99:20120104202245j:plain

結果を下に示します。

f:id:yasuo99:20120104202303j:plain

ソースコードと結果を見比べてみてください。
テストは全て実施され成功していますが、2を返す部分のブロックが実行されていないことが判ります。
ソースコードを良く見ると、elseif (a==1 || b==1)のブロックのせいで、2を返すブロックには到達しないことが判ります。いかがでしょうか?面白いツールだと思いませんか?
次回は、もう少し色々なケースでPexがどのようなテストコードを生成するかを試してみようと思います。