わんくま同盟 大阪勉強会 #38 で Pex の話をしました。

わんくま同盟 大阪勉強会 #38 で Pex の話をします - お だ のスペース でも書きましたが、スピーカーをさせて頂きました。


セッション自体は Pex for fun - from Microsoft Research を紹介する時間を取りたくて、かなりハイペースになってしまいました。
セッション後や懇親会で幾つか質問があったので、何人かには興味は持ってもらえたのかな〜と思ってます、目的達成ですね!
では、幾つかあった質問を紹介してみます。

  • Visual Studio 2010 じゃないと使えない?2008 でも使いたいんだけど?

コマンドラインツールは、Visual Studio に依存しないので、.NET 2.0 以上なら使えます。
また Visual Studio のアドインの場合は、2008、2010 に対応している様です。

Pex and Moles - Downloads - Microsoft Research より引用
Pex Contents

  • Pex Wizard は .dll じゃないと使えない? .exe に対して使ったらエラーが出たんだけど?

その場で試しされた方から質問がありました。Pex Wizard はアセンブリに対して使用出来るので .exe でも問題ありません。

http://research.microsoft.com/en-us/um/redmond/projects/pex/wiki/Pex%20Wizard.html: より引用。

pexwizard.exe <your assembly name>


エラーになった原因は、.exe だからではなくメソッドの可視性が問題だったんじゃないかな?と思います。
以前にも書きましたが、

Pex で使われている属性を調べてみた - PexMethodAttribute - お だ のスペース より引用

Visibility [http://research.microsoft.com/en-us/um/redmond/projects/pex/wiki/Visibility.html]

ざっくり書くと、
・internal:PexClass から見えるなら使えるよ。 InternalsVisibleToAttribute クラス (System.Runtime.CompilerServices) を使って公開してね。この属性は、以前少し紹介しました。C# InternalsVisibleToAttribute と アセンブリの署名 - お だ のスペース
・private:生成するテストコードは、partial class を使うので、private でも見えるよ。
・protected:生成するテストコードは、partial class か サブクラスを使うので、protected でも見えるよ。

ここでいう、private でも見えるというのは テスト対象のクラスの private メンバーでは無く、Pex Wizard で生成/自前で作成する parameterized test cases を実装しているクラスの private メンバーのことです。誤解を招きそうな表現でしたね。
追記
Pex Wizard は成功したんですが、Pex で失敗しました。なんで?Visual Studio からは成功するんですけどね〜。