ASP.NET MVC 專案建立時可勾選建立測試專案,預設使用 Rhino Mocks 3.4 進行模擬測試。本文說明測試專案建立、Mock 協助類別使用,並附登入/權限 Filter 實作範例。
專案名.Tests。MockHelpers 簡化 Controller 上下文模擬。[TestMethod]
public void Index()
{
HomeController home = new HomeController();
var viewEngine = new FakeViewEngine();
home.ViewEngine = viewEngine;
MockRepository mock = new MockRepository();
using (mock.Record())
{
mock.SetFakeControllerContext(home);
}
using (mock.Playback())
{
home.Index();
Assert.AreEqual("Index", viewEngine.ViewContext.ViewName);
}
}
public static class ControllerExtension
{
public static bool IsPost(this Controller controller)
{
return controller.Request.Form.Count > 0;
}
}
RegisterRoutes(RouteTable.Routes);
Application["Posts"] = new List<Post>();
Application["Accounts"] = new List<Account>();
List<Account> la = Application["Accounts"] as List<Account>;
la.Add(new Account { Username = "admin", Password = "admin" }); // 管理員
la.Add(new Account { Username = "user", Password = "user" }); // 一般用戶
/Post/Index:需登入才能瀏覽。/Post/Post:需以 admin 登入才能瀏覽,否則顯示錯誤。登入成功將用戶資訊存入 Session,Filter 攔截未授權存取。
結合 Rhino Mocks 與 FakeViewEngine,可有效測試 Controller 行為。Filter 機制提供聲明式權限控管,搭配擴充方法簡化請求判斷,是 ASP.NET MVC 開發核心技能。