gpt4 book ai didi

c# - 使用 Moq 验证事件注册

转载 作者:IT王子 更新时间:2023-10-29 04:27:53 26 4
gpt4 key购买 nike

我正在开发一个试图实现 MVP 模式的 asp.net(经典)应用程序 using this example .在尝试对我的演示者进行单元测试并使用以下模式时,伪代码看起来像这样

//base view interface
public interface IView
{
event EventHandler Init;

event EventHandler Load;

bool IsPostBack { get; }

void DataBind();

bool IsValid { get;}
}

//presenter psuedo code
public class SomePresenter
{
public SomePresenter(ISomeDomainService service, IView someView)
{
...
//HOW DO WE TEST/VERIFY THAT THIS REGISTRATION OCCURS?
someView.Init += OnInit;
someView.Load += OnLoad;
}
}
...
//consuming code that exercises the above code, that needs to be tested
var presenter = new SomePresenter(someDomainService, someView);

我如何验证演示者正在做预期的事情,即注册 Init 和 Load 事件?虽然这在 Phil Haack's example 中很容易完成使用 Rhino 模拟...

[Test]
public void VerifyAttachesToViewEvents()
{
viewMock.Load += null;
LastCall.IgnoreArguments();
viewMock.PostSaved += null;
LastCall.IgnoreArguments();
mocks.ReplayAll();
new PostEditController(viewMock,
this.dataServiceMock);
mocks.VerifyAll();
}

...我们如何使用最小起订量来做到这一点?

最佳答案

moq 4.13 引入了此功能。现在可以验证 add\remove 是否已被调用。因此引入了四种新方法:

  1. 设置添加
  2. SetupRemove
  3. 验证添加
  4. 验证移除

示例

var mock = new Mock<IAdder<EventArgs>>();
mock.SetupAdd(m => m.Added += (sender, args) => { });

mock.Object.Added += (sender, args) => { };
mock.Object.Added += (sender, args) => { };

mock.VerifyAdd(m => m.Added += It.IsAny<EventHandler>(), Times.Exactly(2));

注意:请注意,为了验证至少应添加一个设置。原因是为了保持与旧版本 moq 的向后兼容性。

关于c# - 使用 Moq 验证事件注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429587/

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