繁体   English   中英

使用最小起订量的TDD Model View Presenter

[英]TDD Model View Presenter using MOQ

我看过使用TDD和MVP模式创建一个小型应用程序的视频。 该视频显示在这里:

http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf

该视频使用Rhino Mocks,谁能阐明您如何使用MOQ进行相同的测试。

因此,如果下面有以下代码,我将如何编写测试(使用MOQ)以测试Init()方法?

public interface IGui
{
   event eventhandler UpdateFromDataSource;
} 

public class Gui :IGui
{
   button.Click += delegate { UpdateFromDataSource(); }   
}

public class GuiPresenter
{
    IGui gui;
    public GuiPresenter(IGui gui)
    {
       this.gui = gui;
    }

    public Init()
    {
        gui.UpdateFromDataSource += delegate {//something};
    }
}

谢谢

认证机构

如果Init()没有产生任何期望的输出,那么我就不会在GuiPresenter上测试Init方法。

您要测试什么?

我想测试GUI UpdateFromDataSource事件是否具有有线处理程序。 因此,我希望能够创建一个GUI模拟,并测试在调用Init时,GUI模拟对象UpdateFromDataSource至少具有一个事件处理程序。

我想获得与此视频中的测试相似的测试。 http://blog.jpboodhoo.com/content/binary/appliedTestDrivenDevelopmentPart3/appliedtestdrivendevelopmentpart3.swf

该视频使用Rhino Mock而不是Moq!

我对基于这样的事件的处理方法有不好的经验。 正如您所发现的那样,模拟和测试更加困难,但是您也将用更困难的代码替换了更简单的代码而又没有真正获得任何收获:您仍然必须编写粘合代码来激活这些事件。 如果发布不正确,事件也可能会导致内存泄漏,或者由于难以在代码中导航而导致讨厌的错误。

我发现将这些事件转换为presenter方法并让视图直接调用它们更加容易。 测试更容易,并且针对模拟编写测试更加困难,这毫无意义。

因此,您想测试Init是否将View的事件连接到演示者中的相应处理程序。

我会创造

  • 模拟视图
  • 将其传递给演示者实例
  • 引发模拟事件,例如, mockView.Raise( m => m.UpdateDataSource()+= null )
  • 验证如果调用处理程序( //something )时应该在演示者中发生的状态更改

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM