2010-11-30 4 views
7

私は単体テストで嘲笑を使いたい。asp.net MVCで嘲笑を開始する良いmockingフレームワークは何ですか? (初心者で、おそらくハードコアの嘲笑者ではない)

これまで、プログラムフロー全体をテストしたので、「テスト」ではなく「ユニットテスト」ではなくプログラムを作成しましたが、ディスカッションを読むと、モックオブジェクトの美しさが時折わかります。

しかし、周りを見回すと、利用可能なフレームワークがたくさんあります。モックフレームワークを一度しか学習することに時間を投資したいので、私は良いものから開始したいと思います。

私はタイトルで言ったように、私はasp.net mvcを使って嘲笑するための初心者で、私はハードコアの嘲笑者ではないと思って、嘲笑いフレームワークのエッジを調べます。

IOCフレームワークで私が気に入っているのは、ユニティと構造マップが好きです。

ミシェル

答えて

3

私はRhino MocksMoqの両方をASP.NET MVCプロジェクトの一部として大成功を収めました。過去にはこれらのフレームワークはかなり異なっていましたが、その機能セットは何年にもわたって収束しており、どちらかが良い選択になるでしょう。

特にMVCをターゲットにしているので、what Phil Haack has to sayも考慮する必要があります。

+0

+1ハックリンクのために+1 – Michel

+0

@Michel Oran(Rhino Mocksの著者)とKzu(Moqの著者)がしばらく前後に行き来するので、この記事のコメントもチェックしてください。あなたが私に尋ねるならば、それは鉄を磨く鉄です。あなたの答えに感謝します。 –

7

私はMoqをお勧めします。私は以前にRhinoを試しましたが、私は個人的にはMoq APIがより滑らかであると感じています。

+1

+1私はMoq APIは非常に初心者フレンドリーで、本当に簡単に入ると思います。私は、Rhinoがより強力であると主張する友人と話し合いましたが、その場合もありますが、両方を使用した後、私はMoqがただちに飛び込むのは比較的簡単です。 – Pandincus

+0

@Pandincus合意。最初はRhinoで始まってMoqを試したので、私は両方を使用しました。私はMoqに泊まった。 Rhinoよりはるかに簡単にMoq APIのフローが見つかりました。 –

1

Moqをお勧めします。

あなたは次のように定義されたクラスMyClassを持って言う:

public class MyClass{ 

    private IMyDependency dependency; 

    public MyClass(IMyDependency dependency){ 
     this.dependency = dependency; 
    } 

    public void DoSomething(){ 
     //invoke a method on the dependency 
     this.dependency.DoWork(); 
    } 

} 

IMyDependencyはこのように宣言されています。今すぐ部品番号を使用して

public interface IMyDependency{ 
    void DoWork(); 
} 

、あなたは依存関係がそうのように呼ばれていることをテストできます。

public void DoSomethingWillInvokeDoWorkCorrectly() 
{ 
    var mock = new Mock<IMyDependency>(); 
    mock.Setup(imd => imd.DoWork()).Verifiable(); 
    var sut = new MyClass(mock.Object); 
    sut.DoSomething(); 
    //Verify that the mock was called correctly 
    mock.Verify(); 
} 

これは非常に簡単な例だったので、それを少しスパイス。

パブリッククラスMyClass2 {

private IMyDependency2 dependency; 

    public MyClass2(IMyDependency2 dependency){ 
     this.dependency = dependency; 
    } 

    public void DoSomething(int i){ 
     //invoke a method on the dependency 
     this.dependency.DoWork(i * 2); 
    } 

} 

IMyDependency2は、このように宣言されています

public interface IMyDependency2{ 
    void DoWork(int i); 
} 

正しいパラメータが依存関係に渡されることを試験する試験方法は、次のようになります。

public void DoSomethingV2WillInvokeDoWorkCorrectly() 
{ 
    var mock = new Mock<IMyDependency2>(); 
    int parameter = 60; 
    mock.Setup(imd => imd.DoWork(It.Is<int>(i => i == 2 * parameter)).Verifiable(); 
    var sut = new MyClass2(mock.Object); 
    sut.DoSomething(parameter); 
    //Verify that the mock was called correctly 
    mock.Verify(); 
} 

ご覧のとおり、Setupメソッドは、に渡されたパラメータに制約を追加し、その値がparameter変数の値の2倍でなければならないintであることを示します。

+0

面白いことに、ほとんどの例はセットアップがなくても「Expect」だけを使用していましたが、それが私がそれを使って作業を始めると、それ自体はクリアになります。 – Michel

関連する問題