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

//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使用犀牛模拟...

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

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

推荐答案

这项功能的最低起订量似乎是not currently available,但可能会出现在future 的版本中(我看过4.0.812.4测试版,但似乎没有).

或许值得问一个问题,"为什么SomePresenter需要订阅View的LoadInit活动?"大概是因为SomePresenter班需要对这些事件做出react .因此,最好在Mock<IView>上使用Raise方法来引发LoadInit事件,然后断言SomePresenter对它们做出了正确的react .

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

在Docker Windows中,ASP.NET核心容器在自定义端口8080上运行,但ASP.NET容器在固定端口80上运行

无法为媒体类型application/x-www-form-urlencoded生成样本

HttpRuntime.Cache[] 与 Application[]

Web API 自托管 - 在所有网络接口上绑定

如何使用 executeReader() 方法仅检索一个单元格的值

异步编程与线程有什么不同?

如何在集线器类之外获取 SignalR 用户连接 ID?

如何确定 web.config 中的编译 debug="true"

HttpContext.Current.Request.IsAuthenticated 和 HttpContext.Current.User.Identity.IsAuthenticated 有什么区别?

如何通过后面的代码不显示

如何设置asp.net身份cookie过期时间

更改后未应用 CSS

是否应该将 project.lock.json 文件签入源代码管理? (ASP.NET 核心 1.0)

如何以编程方式将标签的前景色设置为其默认值?

如何判断用户代理是 ipad 还是 iphone?

如何防止 XXE 攻击(.NET 中的 XmlDocument)

ASP.NET web.config:system.web.compilation 中的 debug 属性的默认值是什么?

Asp.Net Mvc - 如何在共享视图中有一个控制器

IIS url 重写角色,除了一些 url