2012-03-30 3 views
2

私は低レベルの単体テストにPexとMolesを使用していますが、ビジネスロジック検証のためのMSpecも検討しており、Molesを使用して一貫性を維持したいと考えています。私の考えるところでは、MSPecは匿名メソッドを使用しているため、HostType(「Moles」)属性を適用する方法はありません。たとえば:MSpecで匿名メソッドを扱うときに[HostType( "Moles")]を設定するための回避策はありますか?

Because of =() => 
    employeeList = EmployeeManager.GetUsersByRoles(rolesToLoad); 

It should_return_a_list_of_employees =() => 
    employeeList.ShouldNotBeNull(); 

私は「GetUsersByRoles」の内側と呼ばれる役割プロバイダをからかっていると私はMSpec経由でこのテストを実行しようとすると、私は標準の取得エラー「モグラは、インストルメントプロセスにあるようにテストが必要です」私のテストメソッドに[HostType( "Moles")]を追加する命令があります。ここに回避策やその他のオプションがありますか?

サイドノート:MSMSpec.ttをダウンロードし、生成されたVSTestsに属性を含めるように変更しましたが、MSランクまたはTestDriven.netを介して直接MSpecテストを実行できるようにしたいと思いますBAや事業主のためのフレンドリーなアウトプットを得る。

答えて

1

回避策は、匿名メソッドをそうでないものに置き換えることです。モーリングMspecは基本的に不可能です。

モルズは匿名メソッドを迂回することはできません。その理由は、迂回させるためには、その方法が扱い可能でなければならないということです。匿名メソッドは、実行時に生成されて参照されるため、暗黙的にアドレス可能ではありません。簡単に言えば、クラスを介して匿名メソッドを呼び出すことはできません。なぜなら、それは... 匿名です。

Molesマニュアルには、「Molesは、密封されたタイプの非仮想メソッドと静的メソッドを含む.NETメソッドを迂回するために使用できます。したがって、Molesがリフレクションを使用してクラスメンバーを識別するという前提の下での操作は安全な賭けです。 Delegate、Action、またはFuncを介して呼び出すことができないものは、脱却することはできません。

+0

ありがとう、マイク、それは役に立つ説明です。私は、MSpecとPex /ネイティブVSテストの両方で簡単に使用できる良い模擬フレームワークがあるかどうかを判断する必要があります。 –

+0

Molesはmspecでは動作しません。 VS 2011のMicrosoft Fakesプロジェクト(他の機能の間に機能を含む)がこれを可能にするかどうかは誰にも分かりますか? – Alexis

関連する問題