首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC 單元測試實作與 Filter 範例:登入驗證、權限控管與 Mock 測試

     編輯:關於ASP.NET

前言

ASP.NET MVC 專案建立時可勾選建立測試專案,預設使用 Rhino Mocks 3.4 進行模擬測試。本文說明測試專案建立、Mock 協助類別使用,並附登入/權限 Filter 實作範例。

測試專案建立與參考

  • 新增專案時選擇 Create Test Project,自動產生 專案名.Tests。
  • 需參考 Rhino Mocks 3.4。
  • ScottGu 提供的 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);
    }
}

Filter 實作範例:登入與權限驗證

1. 擴充方法:判斷是否為 POST 請求

public static class ControllerExtension
{
    public static bool IsPost(this Controller controller)
    {
        return controller.Request.Form.Count > 0;
    }
}

2. Global.asax 初始化測試帳號

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" });   // 一般用戶

3. 頁面存取規則

  • /Post/Index:需登入才能瀏覽。
  • /Post/Post:需以 admin 登入才能瀏覽,否則顯示錯誤。

4. 登入驗證使用 Session

登入成功將用戶資訊存入 Session,Filter 攔截未授權存取。

結語

結合 Rhino Mocks 與 FakeViewEngine,可有效測試 Controller 行為。Filter 機制提供聲明式權限控管,搭配擴充方法簡化請求判斷,是 ASP.NET MVC 開發核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved