如果你看看基地的源代碼初始化方法,你會發現,它的作用是,它建立了ControllerContext和URL的東西。現在,下載MvcContrib TestHelper並檢查出TestControllerBuilder。構建者設置您需要的所有內容,以便擁有您所依賴的控制器上下文和其他內容。 好吧,我們還沒有結束 - 你想測試你自己的初始化權的覆蓋? 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
}
清楚了嗎?
感謝鮑里斯,我仍然對你的回答感到滿意。我會按照你的指導,看看它是否有效。 – 2011-04-24 21:43:03
我已經編輯了格式化和測試樣本的響應。希望現在好一點。 – 2011-04-24 22:12:58
我愛你說:「你在我身邊嗎?」 :)無論如何,這是我的解決方案。 – Samuel 2012-10-15 19:37:47