gpt4 book ai didi

c# - Moq'ing 多次引发事件

转载 作者:太空狗 更新时间:2023-10-29 20:29:33 25 4
gpt4 key购买 nike

在一个特定的单元测试中,我试图多次引发一个事件,然后在引发最后一个事件后验证属性值。我有类似的东西

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

方向实际上只更改为东(因为我相信该事件只引发一次)。难道我做错了什么?这是我第一次使用最小起订量,所以我可能遗漏了一些东西。

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

最佳答案

mockFoo.Raise 应该没问题,将事件引发三次...您可以在事件处理程序中放置一个断点并检查它被调用了多少次吗?

我看到的另一个潜在错误是,您应该首先告诉 Moq 开始跟踪属性的所有设置/获取,然后才能验证它(以及引发事件之前):

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

关于c# - Moq'ing 多次引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1826424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com