在 MSTest 中模拟 ASP.NET Core 中的 TempData

编程入门 行业动态 更新时间:2024-10-23 03:23:07
本文介绍了在 MSTest 中模拟 ASP.NET Core 中的 TempData的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 public ActionResult View(string name) { if (TempData["SessionVariable"] != null) { FileName = name; return View(); } else { return RedirectToAction("index", "Home"); } }

测试方法

public void UseCaseView_CorrectRequirements() { var mock = new Mock<Controller>(); mock.Setup(p => p.TempData["SessionVariable"]).Returns("admin"); Controller.View("SAMPLE.xml"); }

它抛出一个错误,例如,

It throws an error such as ,

结果堆栈跟踪:

在 Moq.Mock.ThrowIfSetupExpressionInvolvesUnsupportedMember(Expressionsetup, MethodInfo 方法)在 C:projectsmoq4SourceMock.cs:line 883在 Moq.Mock.SetupGetPexProtected[T,TProperty](Mock1 mock,表达式1个表达式,条件条件)中C:projectsmoq4SourceMock.cs:line 537 atMoq.Mock.SetupGet[T,TProperty](Mock1 mock, Expression1 表达式,条件条件)在 C:projectsmoq4SourceMock.cs:line 517 atMoq.Mock.SetupPexProtected[T,TResult](Mock1 mock, Expression1表达式,条件条件)在C:projectsmoq4SourceMock.cs:line 507 atMoq.Mock.Setup[T,TResult](Mock1 mock, Expression1 表达式,条件条件)在 C:projectsmoq4SourceMock.cs:line 484 atMoq.QueryableMockExtensions.FluentMock[T,TResult](Mock1 mock,表达式1 setup) in C:projectsmoq4SourceLinqMocks.cs:line 224在 lambda_method(Closure) at Moq.Mock.GetTargetMock(Expression)fluentExpression, Mock mock) 在 C:projectsmoq4SourceMock.cs:line第 856 章表达式1个表达式,条件条件)中C:projectsmoq4SourceMock.cs:line 505 atMoq.Mock.Setup[T,TResult](Mock1 mock, Expression1 表达式,条件条件)在 C:projectsmoq4SourceMock.cs:line 484 atSE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements()在

at Moq.Mock.ThrowIfSetupExpressionInvolvesUnsupportedMember(Expression setup, MethodInfo method) in C:projectsmoq4SourceMock.cs:line 883 at Moq.Mock.SetupGetPexProtected[T,TProperty](Mock1 mock, Expression1 expression, Condition condition) in C:projectsmoq4SourceMock.cs:line 537 at Moq.Mock.SetupGet[T,TProperty](Mock1 mock, Expression1 expression, Condition condition) in C:projectsmoq4SourceMock.cs:line 517 at Moq.Mock.SetupPexProtected[T,TResult](Mock1 mock, Expression1 expression, Condition condition) in C:projectsmoq4SourceMock.cs:line 507 at Moq.Mock.Setup[T,TResult](Mock1 mock, Expression1 expression, Condition condition) in C:projectsmoq4SourceMock.cs:line 484 at Moq.QueryableMockExtensions.FluentMock[T,TResult](Mock1 mock, Expression1 setup) in C:projectsmoq4SourceLinqMocks.cs:line 224 at lambda_method(Closure ) at Moq.Mock.GetTargetMock(Expression fluentExpression, Mock mock) in C:projectsmoq4SourceMock.cs:line 856 at Moq.Mock.SetupPexProtected[T,TResult](Mock1 mock, Expression1 expression, Condition condition) in C:projectsmoq4SourceMock.cs:line 505 at Moq.Mock.Setup[T,TResult](Mock1 mock, Expression1 expression, Condition condition) in C:projectsmoq4SourceMock.cs:line 484 at SE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements() in

D:PublicSE_WEBAPP_TESTCASESE_WEBAPPSE_WEBAPP.TestsTestControllersUsecaseControllerTests.cs:line 23

D:PublicSE_WEBAPP_TESTCASESE_WEBAPPSE_WEBAPP.TestsTestControllersUsecaseControllerTests.cs:line 23

结果信息:测试方法SE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements抛出异常:System.NotSupportedException: Invalid setup on a非虚拟(在 VB 中可覆盖)成员:mock => mock.TempData

Result Message: Test method SE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements threw exception: System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: mock => mock.TempData

推荐答案

在 asp-core 中,Controller.TempData 是一个公共属性,因此您可以轻松访问它并设置所需的键/值

In asp-core, Controller.TempData is a public property, so you can easily access it and set the desired key/value

public void UseCaseView_CorrectRequirements() { // Arrange var httpContext = new DefaultHttpContext(); var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>()); tempData["SessionVariable"] = "admin"; var controller = new UsecaseController() { TempData = tempData }; var expected = "SAMPLE.xml"; //Act var view = controller.View(expected) as ViewResult; var actual = controller.FileName; //Assert Assert.AreEqual(expected, actual); }

更多推荐

在 MSTest 中模拟 ASP.NET Core 中的 TempData

本文发布于:2023-11-15 08:08:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1592656.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:ASP   MSTest   NET   TempData   Core

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!