加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET MVC – 单元测试覆盖初始化方法

发布时间:2020-12-16 03:43:42 所属栏目:asp.Net 来源:网络整理
导读:我有一个下面显示的抽象类,它被所有其他控制器继承.是否可以测试这种方法?顺便说一下,我正在尝试使用MOQ,但没有运气.如果你能帮助我,我将不胜感激: public abstract class ApplicationController : Controller{ protected override void Initialize(System
我有一个下面显示的抽象类,它被所有其他控制器继承.是否可以测试这种方法?顺便说一下,我正在尝试使用MOQ,但没有运气.如果你能帮助我,我将不胜感激:

public abstract class ApplicationController : Controller
{  
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
       base.Initialize(requestContext);

       //do some stuff here
    }
}

解决方法

如果你看一下基本Initialize方法的源代码,你会发现它的作用是它设置了ControllerContext和url的东西.现在,下载MvcContrib TestHelper并查看 TestControllerBuilder.构建器会设置您需要的所有内容,以便拥有控制器上下文和您依赖的其他内容.
好的,我们还没有结束 – 您想测试自己的Initialize权限吗?
TestControllerBuilder不会调用您的Initialize,因为它以不同的方式进行初始化.我建议你将自定义的Initialize()逻辑分解为不同的方法.然后使用公共方法创建伪(存根)子类,该方法将此因素调用为受保护的Initialize.你跟我在一起吗?

就像是:

public abstract class ApplicationController : Controller
{  

   protected override void Initialize(System.Web.Routing.RequestContext requestContext)
   {
      base.Initialize(requestContext);
      MyInitialzie()
   }
    protected void MyInitialize()
    {
       ControllerContext.XXX // do whatewer you want here. Context is already setted up
    }
}

class FakeController: ApplicationController 
{
   public void CallMyInitialize()
   {
      MyInitialize();
   }
}

后来在测试课上:

[Test]
public void MyInitializeTest()
{
    TestControllerBuilder builder = new TestControllerBuilder();
    FakeController controller = new FakeController();
    builder.InitializeController(controller);

    controller.CallMyInitialize();
    //TODO: verification of MyInitialize assumptions
}

明白了吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读