2009-12-01 38 views
7

在一個特定的單元測試中,我試圖多次提出事件,然後在最終事件發生後提高屬性值。我有類似的東西Moq'ing多次事件的籌集

public void TurnRight() 
{ 
    var mockFoo = new Mock<IFoo>(); 

    SomeService someService= new SomeService(); 
    someService.Foo= mockFoo.Object; 

    mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty); 
    mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty); 
    mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty); 

    mockFoo.VerifySet(foo=> foo.Orientation = Orientation.West); 
} 

方向實際上只改變爲東(因爲我相信事件只會升起一次)。難道我做錯了什麼?這是我第一次使用moq,所以我可能錯過了一些東西。

乾杯 Ĵ

編輯...正確的,我會一直使用

public void TurnRight() 
    { 
     var mockFoo = new Mock<IFoo>(); 

     SomeService someService= new SomeService(); 
     someService.Foo= mockFoo.Object; 

     mockFoo.SetupProperty(foo=> foo.Orientation); 

     mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty); 
     mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty); 
     mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty); 

     Assert.AreEqual(mockFoo.Object.Orientation, Orientation.South); 
    } 

回答

5

mockFoo.Raise代碼應該是罰款,引發事件的三次......你可以把一個斷點在事件處理程序中,並檢查它被調用了多少次?

在這裏,我可以看到另一個潛在的錯誤,是你應該先告訴最小起訂量開始跟蹤所有設置屬性/獲取,才能驗證它(和之前你提出的事件):

// start "tracking" sets/gets to this property 
mockFoo.SetupProperty(foo=> foo.Orientation);