在一个特定的单元测试我试图多次引发一个事件,然后最终事件已经升高之后veryify一个属性值。我有类似

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

方向实际上只有改为东(因为我相信该事件才刚刚上调一次)。难道我做错了什么?这是我第一次使用的起订量,所以我可能失去了一些东西。

干杯 Ĵ

修改...正确的代码我应该已经使用

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);
    }
有帮助吗?

解决方案

mockFoo.Raise应该罚款,引发事件的三次......你可以把一个断点在事件处理程序,并检查它被调用多少次?

在这里,我可以看到另一个潜在的错误,是你应该先告诉最小起订量开始跟踪所有集合/属性的获取,才能验证它(和你提出前的事件):

// start "tracking" sets/gets to this property
mockFoo.SetupProperty(foo=> foo.Orientation);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top