gpt4 book ai didi

asp.net - 将 ActionResult 转换为 HttpNotFoundResult 返回 null

转载 作者:行者123 更新时间:2023-12-02 01:51:36 25 4
gpt4 key购买 nike

我有一个针对我的 Controller 的单元测试,断言当找不到模型实例时会返回 HttpNotFoundResult。问题是, Controller 中的实际代码按预期工作,但我的单元测试不是。将 ActionResult 转换为 HttpNotFoundResult 时,它返回 null,因此我的单元测试失败。

Controller 代码:

public ActionResult Delete(int? id)
{
if(id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Forum forum = forumRepository.GetForumById(id.GetValueOrDefault());
if(forum == null)
{
return new HttpStatusCodeResult(HttpStatusCode.NotFound);
}
return View(forum);
}

测试方法:

 [TestMethod]
public void GetDeleteShouldReturn404IfForumNotFound()
{
// Arrange
var forumRepository = Mock.Create<IForumRepository>();
Mock.Arrange(() => forumRepository.GetForums())
.Returns(new List<Forum>() {
new Forum { ForumId = 1, Title = "General Forum", Description = "Place to discuss general stuff", Sequence = 2 },
new Forum { ForumId = 2, Title = "Gaming", Description = "Let's talk about gaming", Sequence = 1 },
new Forum { ForumId = 3, Title = "Web Development", Description = "ASP.NET is pretty cool", Sequence = 3 }
}).MustBeCalled();

// Act
ForumController controller = new ForumController(forumRepository);
ActionResult result = controller.Delete(5) as HttpNotFoundResult;

// Assert
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(HttpNotFoundResult));
}

Assert.IsNotNull 失败。我也尝试了以下相同的结果:

HttpNotFoundResult result = controller.Delete(5) as HttpNotFoundResult;

这让我感到困惑,因为我在几个示例中看到了几乎相同的代码:

http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-using-httpnotfoundresult-in-controller-tests.aspx

我做错了什么吗?

编辑:

问题是我没有模拟 GetForumById(),将测试代码更改为以下有效:

[TestMethod]
public void GetDeleteShouldReturn404IfForumNotFound()
{
// Arrange
var id = 10;
Forum forum = null;

var forumRepository = Mock.Create<IForumRepository>();

Mock.Arrange(() => forumRepository.GetForumById(id))
.Returns(forum)
.MustBeCalled();

// Act
ForumController controller = new ForumController(forumRepository);
var result = controller.Delete(id) as HttpNotFoundResult;

// Assert
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(HttpNotFoundResult));
}

最佳答案

是因为HttpNotFoundResult源自 HttpStatusCodeResult ,而不是相反。您正在进行无效的向下转换,这使得 as 语句返回 null。

关于asp.net - 将 ActionResult 转换为 HttpNotFoundResult 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22380784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com