Jam*_*Hay 7 c# unit-testing moq
在一个特定的单元测试中,我试图多次引发一个事件,然后在最终事件被引发之后通知一个属性值.我有类似的东西
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);
}
Run Code Online (Sandbox Code Playgroud)
方向实际上只改为东方(因为我相信这个事件只会被提升一次).难道我做错了什么?这是我第一次使用moq,所以我可能会遗漏一些东西.
干杯J
编辑...我应该使用的正确代码
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);
}
Run Code Online (Sandbox Code Playgroud)
mockFoo.Raise
应该没问题,将事件提升三次......你能在事件处理程序中放一个断点并检查它被调用了多少次?
我可以看到的另一个潜在的错误是,你应该首先告诉Moq开始跟踪属性的所有set/gets,然后才能验证它(并且在你提出事件之前):
// start "tracking" sets/gets to this property
mockFoo.SetupProperty(foo=> foo.Orientation);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3243 次 |
最近记录: |