ASP.NET MVC - 单元测试重写初始化方法

2024-03-11

我有一个如下所示的抽象类,它被所有其他控制器继承。是否有可能测试这个方法?顺便说一句,我正在尝试使用最小起订量,但没有运气。如果您能帮助我,我将不胜感激:

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 并查看测试控制器生成器 http://mvccontrib.codeplex.com/wikipage?title=TestHelper。构建器设置了您需要的一切,以便拥有控制器上下文和您依赖的其他内容。 好的,我们还没有结束 - 您想测试自己的初始化重写吗? TestControllerBuilder 不会调用您的 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
}

明白了吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC - 单元测试重写初始化方法 的相关文章

随机推荐