2009-12-01 41 views
7

Trong một bài kiểm tra đơn vị cụ thể, tôi đang cố gắng nâng cao một sự kiện nhiều lần và sau đó để xác định giá trị thuộc tính sau khi sự kiện cuối cùng được nâng lên. Tôi có một cái gì đó giống nhưMoq'ing việc tăng sự kiện nhiều lần

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); 
} 

Chỉ thực sự thay đổi về hướng đông (như tôi tin rằng sự kiện chỉ được nâng lên một lần). Tôi có làm điều gì sai? Đây là lần đầu tiên tôi đã sử dụng moq vì vậy tôi có thể thiếu một cái gì đó.

Cheers J

chỉnh sửa ... mã đúng tôi nên đã được sử dụng

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); 
    } 

Trả lời

5

mockFoo.Raise nên được tốt, nâng cao sự kiện ba lần ... Bạn có thể đặt một breakpoint trong xử lý sự kiện và kiểm tra bao nhiêu lần nó được gọi là?

Một sai lầm tiềm năng ở đây như tôi có thể nhìn thấy, đó là lần đầu tiên bạn nên nói với Moq để bắt đầu theo dõi tất cả các bộ/nhận của một tài sản trước khi bạn có thể xác minh nó (và trước khi bạn nâng cao sự kiện):

// start "tracking" sets/gets to this property 
mockFoo.SetupProperty(foo=> foo.Orientation); 
Các vấn đề liên quan