You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写单元测试验证ASP.NET Core页面标题?测试抛异常求解决

解决ASP.NET Core Razor页面单元测试空引用异常

问题原因

单元测试运行时抛出NullReferenceException,根源是IndexModel继承的PageModel中ViewData属性默认未初始化,而OnGet方法直接访问ViewData["Title"],导致空引用。

修复方案

方案1:在测试中初始化ViewData

修改单元测试代码,手动为PageModel的ViewData属性赋值:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using Presentation_app.Pages;
using Microsoft.AspNetCore.Mvc.ViewFeatures;

namespace UnitTestProject
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void VerifyHomePageTitle()
        {
            // Arrange
            var logger = new LoggerFactory().CreateLogger<IndexModel>();
            var pageModel = new IndexModel(logger);
            // 初始化ViewData字典
            pageModel.ViewData = new ViewDataDictionary(
                new EmptyModelMetadataProvider(), 
                new ModelStateDictionary()
            );

            // Act
            pageModel.OnGet();
            string title = pageModel.Title;

            // Assert
            Assert.IsNotNull(title);
            Assert.AreEqual("Home page", title);
        }
    }
}

方案2:优化PageModel逻辑(推荐)

原代码中IndexModel的OnGet方法通过ViewData中转赋值Title属于冗余操作,且依赖未初始化的ViewData。可以简化代码,直接为Title赋值:

修改Index.cshtml.cs:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace Presentation_app.Pages
{
    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;
        public string Title { get; private set; }

        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }

        public void OnGet()
        {
            Title = "Home page";
            // 若需保持ViewData赋值,确保在测试中初始化ViewData,或移除该行(cshtml中已设置)
            // ViewData["Title"] = Title;
        }
    }
}

此时原单元测试代码无需修改即可正常运行,因为OnGet不再依赖未初始化的ViewData。

补充说明

  • 若保留ViewData["Title"]的赋值,仍需在测试中初始化ViewData;
  • 测试方法名建议改为有意义的名称(如VerifyHomePageTitle),便于识别测试意图。

内容的提问来源于stack exchange,提问作者Elena Isabella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:05:37