【发布时间】:2019-02-10 09:37:00
【问题描述】:
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");
}
它会抛出一个错误,例如,
结果堆栈跟踪:
在 Moq.Mock.ThrowIfSetupExpressionInvolvesUnsupportedMember(Expression setup, MethodInfo 方法)在 C:\projects\moq4\Source\Mock.cs:line 883 在 Moq.Mock.SetupGetPexProtected[T,TProperty](Mock
1 mock, Expression1 表达式,条件条件)中 C:\projects\moq4\Source\Mock.cs:第 537 行 Moq.Mock.SetupGet[T,TProperty](Mock1 mock, Expression1 表达式, 条件条件)在 C:\projects\moq4\Source\Mock.cs:line 517 at Moq.Mock.SetupPexProtected[T,TResult](Mock1 mock, Expression1 表达式,条件条件)在 C:\projects\moq4\Source\Mock.cs:第 507 行 Moq.Mock.Setup[T,TResult](Mock1 mock, Expression1 表达式, 条件条件)在 C:\projects\moq4\Source\Mock.cs:line 484 at Moq.QueryableMockExtensions.FluentMock[T,TResult](Mock1 mock, Expression1 setup) 在 C:\projects\moq4\Source\Linq\Mocks.cs:line 224 在 lambda_method(Closure) 在 Moq.Mock.GetTargetMock(Expression fluentExpression, Mock mock) 在 C:\projects\moq4\Source\Mock.cs:line 856 在 Moq.Mock.SetupPexProtected[T,TResult](Mock1 mock, Expression1 表达式,条件条件)中 C:\projects\moq4\Source\Mock.cs:第 505 行 Moq.Mock.Setup[T,TResult](Mock1 mock, Expression1 表达式, 条件条件)在 C:\projects\moq4\Source\Mock.cs:line 484 at SE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements() 在D:\Public\SE_WEBAPP_TESTCASE\SE_WEBAPP\SE_WEBAPP.Tests\TestControllers\UsecaseControllerTests.cs:第 23 行
结果消息:测试方法 SE_WEBAPP.Tests.TestControllers.UsecaseControllerTests.UseCaseView_CorrectRequirements 抛出异常:System.NotSupportedException:在 非虚拟(在 VB 中可覆盖)成员:mock => mock.TempData
【问题讨论】:
-
你可以查看这个 url 我们如何模拟临时数据weblogs.asp.net/leftslipper/…
-
我正在使用 .net 核心框架和 MStest 作为核心框架,给出的是 .net 4.7.1 框架。这对我来说不匹配。我检查一下。谢谢,请提供更多建议。@RakeshKumar
标签: c# unit-testing asp.net-core moq mstest