BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

Pexの最新版がリリース - .NET用のホワイトボックステストライブラリ

| 作者: Al Tenhundfeld フォローする 0 人のフォロワー , 翻訳者 金森 諭 フォローする 0 人のフォロワー 投稿日 2009年5月25日. 推定読書時間: 3 分 |

原文(投稿日:2009/4/27)へのリンク

Microsoft Research(リンク)は自動ホワイトボックステストの.NET用ライブラリであるPex(リンク)の新バージョンをリリースした。Pex v0.11ではデリゲートをパラメータで渡す、新しい例外ツリーのビュー、イベントのスタブ化、再帰スタブのサポートが加わった。今回のリリースではStubs(.NET用のスタブフレームワーク)Visual Studioアドインの登録に関する問題も修正され、また最新のCode Contracts(契約プログラミング用のライブラリ)が使用されるようになった。

PexはVisual Studioのコードエディタからメソッドへの入力・出力値を見つけ、高いコードカバレッジのある小さなテストスイートを作ることができます。Pexは体系的な解析をおこない、境界条件や例外やアサーションの欠陥を見つけ出し、デバッグをおこえるようにします。Pexを使うとユニットテストを拡張したパラメータ化ユニットテストをおこなえるようになり、メンテナンスのコストを減らすことができます。

 Pex v0.11.40421.0はMicrosoft Researchのページでダウンロードできる(リンク)。これを使用するにはOpenMP C++ランタイムが必要となる。Visual Studioのインストールするとこのこのランタイムも入るが、単体でダウンロードもできる(リンク)

デリゲートをパラメータで渡す:Pexはデリゲートをパラメータで渡すパラメータ化ユニットテストの機能を備えるようになった。Pexはデリゲートインスタンスを自動的に生成し、またその振る舞いも作り出す。たとえばデリゲートが値を返す場合、Pexはそれ用の新しいシンボル値を作り、その使用状況を追跡し、プログラムの振る舞いに応じた戻り値を生成する。

テストでPexを実行すると、戻り値を何にするかPexに「聞きに行く」関数(裏ではPexChooseが使われる)が作られる。これによりデリゲートに対する呼び出しごとにPexは異なる値を返すことができる。うまく使えば、カバレッジを向上させるだけのさまざまな値をPexに作らせることができる。たとえば例外処理のテストがきちんとできているかを確認するために最初の呼び出しで123という値を「選ばせる」ことができる。

Pex Explorer:例外ツリービュー:

私たちは大規模なテストでのPexの使い勝手の向上に取り組み始めました。そのために作られたPex Explorerと呼ばれる新しいウィンドウでは、Pexが生成したイベントについてさまざまな角度から情報を見ることができます。そのウィンドウの例外ツリービュー(Exception Tree View)ではPexが見つけた例外の型のツリーを確認することができます。これは(かなり)やっかいな例外から追っていくのに大変便利な機能です。

Pex Explorer: Contract Failuresツリービュー:Code Contractsが使われる場合、契約(Contract)の失敗といったことを確認するための特別なビューも使えるようになる。

スタブでのイベント:戻り値用のデリゲート(イベントのデリゲートを保持する)をスタブのパブリックなフィールドにすることで、イベントをStubsで扱えるようになった。その結果、イベントも他のものと同様に初期化、値のセット、実行をおこなうことができる。

再帰スタブ:モック/スタブフレームワークが大抵備えている機能にネスト(入れ子)呼び出しがある。Pexでもスタブがプロパティのゲッターを再帰的に呼び出すことができるようになった。プロパティのゲッターをデリゲートにするのであれば、名前がAsStubで終わる新しいヘルパメソッドを使うこともできる。これらのメソッドは、ネストしたスタブをプロパティゲッターに割り当てたり返したりするよう管理をおこなってくれる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT