【发布时间】:2022-01-24 03:06:37
【问题描述】:
具有以下精简代码(.net core 3.1):
public ActionResult OnGet()
{
ViewData["ACustomMessage"] = $"This a custom message";
return Page();
}
我需要一个单元测试来测试在 ViewData 中创建的消息。
public void Test_ViewData()
{
var loggerMock = new Mock<ILogger<PrivacyModel>>();
var httpContext = new DefaultHttpContext();
var modelState = new ModelStateDictionary();
var actionContext = new ActionContext(httpContext, new RouteData(), new PageActionDescriptor(), modelState);
var modelMetadataProvider = new EmptyModelMetadataProvider();
var viewData = new ViewDataDictionary(modelMetadataProvider, modelState);
var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>());
var pageContext = new PageContext(actionContext)
{
ViewData = viewData
};
PrivacyModel privacyRazorPage = new PrivacyModel(loggerMock.Object)
{
PageContext = pageContext,
TempData = tempData,
Url = new UrlHelper(actionContext)
};
var resultPrivacy = privacyRazorPage.OnGet();
Assert.AreEqual("This a custom message", ((PageResult)resultPrivacy).ViewData["ACustomMessage"]);
}
此测试不起作用,因为 resultPrivacy 作为实例化对象返回,但其所有属性都为 null。
【问题讨论】:
-
框架是在运行时将值传递给结果的。但由于这是一个不会自动发生的独立单元测试。您需要检查页面模型的视图数据并在那里进行检查。
标签: c# unit-testing asp.net-core razor-pages asp.net-core-3.1