Nil*_*Pun 6 asp.net asp.net-mvc-3
我有一个下面显示的抽象类,它被所有其他控制器继承.是否可以测试这种方法?顺便说一下,我正在尝试使用MOQ,但没有运气.如果你能帮助我,我将不胜感激:
public abstract class ApplicationController : Controller
{
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
//do some stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
如果您查看基本 Initialize 方法的源代码,您会发现它的作用是设置 ControllerContext 和 url 内容。现在,下载 MvcContrib TestHelper 并查看TestControllerBuilder。构建器设置了您需要的一切,以便拥有控制器上下文和您依赖的其他内容。好的,我们还没有结束 - 您想测试自己的初始化重写吗?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();
}
}
Run Code Online (Sandbox Code Playgroud)
后来在测试课上:
[Test]
public void MyInitializeTest()
{
TestControllerBuilder builder = new TestControllerBuilder();
FakeController controller = new FakeController();
builder.InitializeController(controller);
controller.CallMyInitialize();
//TODO: verification of MyInitialize assumptions
}
Run Code Online (Sandbox Code Playgroud)
明白了吗?
| 归档时间: |
|
| 查看次数: |
2228 次 |
| 最近记录: |