2012-01-05 7 views
2

私はRhinomocksフレームワークをもっとよく理解しようとしています。私はRhinomocksのExpectメソッドを理解しようとしています。rhinomocks設定期待、単体テスト常時受け渡し

[TestMethod] 
public void Create_ValidModelData_CreatesNewEventObjectWithGivenSlugId() 
{ 
    //Arrange 
    var eventList = new List<Event>() { new Event() { Slug = "test-user" } }; 

    _stubbedEventRepository.Stub(x => x.GetEvents()) 
     .Return(eventList); 

    _stubbedEventRepository 
     .Expect(x => x.SaveEvent(eventList.SingleOrDefault())) 
     .Repeat 
     .Once(); 

    var controller = new EventController(_stubbedEventRepository); 
    EventViewModel model = new EventViewModel(); 

    //Act 
    //controller.Create(model); COMMENTED OUT 

    //Assert 
    _stubbedEventRepository.VerifyAllExpectations(); 
} 

私はSaveEvent(...)メソッドgetのは一度だけ呼び出された場合にのみ渡すために、このコードを理解して考えた:

は、ここで私が書いたユニットテストです。ただし、controller.Create(model)をコメントアウトしても、テストは引き続き実行されます。コントローラ内で作成します。作成(モデル)は、SaveEvent()メソッドが呼び出される場所です。

私は次のことを試してみました:

_stubbedEventRepository 
    .Expect(x => x.SaveEvent(eventList.SingleOrDefault())); 

をしかし、それはまだ私が間違ってスタックオーバーフローが何をやっている、すべての時間を渡しますか?私がオンラインで見た情報源は私を助けることができませんでした。 VerifyAllExpectations()が単体テストを成功させるのはなぜですか? ありがとうございました!

ここでは、コントローラのコンストラクタのボディです:

public EventController(IEventRepository eventRepository) 
{ 
    _eventRepository = eventRepository; 
} 

は、編集:

// member variables 
private IEventRepository _stubbedEventRepository; 

    [TestInitialize] 
    public void SetupTests() 
    { 
     _stubbedEventRepository = MockRepository.GenerateStub<IEventRepository>(); 
    } 
+0

どのように '_stubbedEventRepository'を作成していますか? 'MockRepository.GenerateMock ()'を使ってください。 – vcsjones

+0

私が使用していたものを表示するように投稿を更新しました。私はstubbedRepositoryをアサートしているので、間違ったGenerateStubを使用していました – Short

答えて

4

あなたがテスト中のコードの動作を確認したい場合は、適切な期待してモックを使用します。 、それを確認してください。特定の方法で動作する必要があるかもしれないが、このテストの焦点では​​ない値を渡すだけの場合は、スタブを使用します。

関連する問題