C# 在单元测试中处理TempData变量
下面的示例如下: , 我写下了以下测试方法:C# 在单元测试中处理TempData变量,c#,unit-testing,asp.net-core,tempdata,C#,Unit Testing,Asp.net Core,Tempdata,下面的示例如下: , 我写下了以下测试方法: [Fact] public void TestBackMethod() { var httpContext = new DefaultHttpContext(); var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>()); tempData["id"] = 3008; var controller = n
[Fact]
public void TestBackMethod()
{
var httpContext = new DefaultHttpContext();
var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>());
tempData["id"] = 3008;
var controller = new PhaseController(Configuration)
{
TempData = tempData
};
var result = controller.Back() as ViewResult;
Assert.Contains("Index", result.ViewName);
}
然而,在这方面:
Assert.Contains("Index", result.ViewName);
结果
为null
“对象引用未设置为对象的实例。”
为什么会发生这种情况?我如何修复它?因为
返回查看结果-它返回重定向到操作结果
(您可以将鼠标悬停在重定向到操作上以查看确切的对象名)。这两种方法都实现了IActionResult
您会得到一个空引用异常,因为当您使用as
关键字强制转换对象时,如果转换不可能,它将返回空
如果你有
var result = (ViewResult)controller.Back();
您将在该行的运行时得到一个差异异常,表示转换不可能
您应该使用以下方法之一进行转换:
var result = (RedirectToActionResult)controller.Back();
或
因为Back
不返回ViewResult
,它返回RedirectToActionResult
(您可以将鼠标悬停在RedirectToAction上以查看确切的对象名称)。这两种方法都实现了IActionResult
您会得到一个空引用异常,因为当您使用as
关键字强制转换对象时,如果转换不可能,它将返回空
如果你有
var result = (ViewResult)controller.Back();
您将在该行的运行时得到一个差异异常,表示转换不可能
您应该使用以下方法之一进行转换:
var result = (RedirectToActionResult)controller.Back();
或
哦,所以这不是因为TempData
!非常感谢您的帮助,它现在工作得很好。哦,这不是因为TempData
!非常感谢你的帮助,它现在工作得很好。