NSpec を使って .NET Framework 2.0 のテストをする
発端は RSpec
別事業部は Ruby on Rails で開発を行っており、たまたまそこにパートナーで Ruby がかなりデキル人が来ていてタイミング良く RSpec のレクチャー会に参加できました。
いやー、WEB+DB とか読んでてスゴイスゴイとは思ってましたが、いざライブコーディングされるとその素敵さはすさまじいですね。
まずは IronRuby + RSpec でやってみた。が。。。
IronRuby と RSpec の概要 - MSDN とか見つつやっていくと割と簡単にできました。
RSpec のテスト自体も楽勝で動作しました。唯一上記の記事通りいかなかったのは記事の執筆された時期から RSpec のバージョンも上がったせいか実行コマンドが異なりました。
以下で動作しました。
>ir -S rspec -fs sampletest_spec.rb
RSpec 標準の Mock が動作しない!!
これが致命的でした。ぶっちゃけ Mock をさせないと話しになりません。エラーメッセージ的には型の不一致エラーが出ているのですが、Ruby なのにそんなのおかしいじゃないかと。
以下のサイトで紹介されているように Caricature を使用すればいけるようなのですがここで少しモチベーションダウンしてしまった訳です。。
Write your Tests in RSpec with IronRuby - Kazi Manzur Rashid's Blog
NSpec があるよ!
と、どうやら NSpec の開発者らしき方から情報をもらい、どうやら .NET でも似たような事ができると知りました。探していると同じようなライブラリに MSpec というのもあったのですが、せっかくなので NSpec から試してみる事に。
NSpec
NSpec は .NET Framework 4 が必要だ。
いきなり挫折しそうになりました。。だってうちは 2.0 なんだから、そんな事を思っていたら、テストだけ 4 でやればいい的な事を言われ、なるほどと。
Visual Studio 2010 Express Edition のインストール
まだライセンスをくれと上司に言える状態でもないので、とりあえず Visual Studio 2010 Express Edition をインストールしました。
.NET Framework 4 もこれで一緒に入ります。
あれ、拡張機能マネージャーコンソールが無い。。。
これはよく分からないのですが、 Express Edition にはコンソールがありませんでした。これでは NSpec のページに書いてある通りにインストールができないじゃないか!
NuGet をインストールしようとしても「そのバージョンにはインストールできねぇよ」と言われる始末。。どうしようも無い。ライセンス欲しい。
NSpec のバイナリをダウンロードして参照させる
諦めて普通に dll を参照させる方針に切り替えました。
Github にバイナリが置いてあるのでそれをダウンロード。
NSpec ダウンロード
後は普通に参照設定させるだけです。
ちなみに NSpec 用のプロジェクトはクラスライブラリで作る必要があります。
最初のテストを書いてみる
テスト対象のクラスをビルドしバイナリ (exeやdll)を作成しそれを NSpec 用のクラスライブラリの参照に加えます。
テストを回すためにもテスト対象の Debug フォルダ以下のバイナリを直接参照した方がいいでしょう。
using Sample; // テスト対象の名前空間 using NSpec; namespace NSpecFirstSample { public class first_spec : nspec { void first_test() { it["最初のテストです"] = () => { var test = new TestClass(); test.should_not_be_null(); // 単純な存在チェック }; } } }
実行は以下のようにします。 NSpecFirstSample.dll は NSpec 用のクラスライブラリです。
> NSpecRunner.exe NSpecFirstSample.dll firstspec first test 最初のテストです 1 Examples, 0 Failed, 0 Pending
おおー!できましたね!マッチャーがどの程度 RSpec に追随しているのかはまだ分かりませんが、テストのレポートもなかなか良い感じです。
RSpec 程はコードはスッキリしませんがなかなか良いのではないでしょうか。