【发布时间】:2021-03-28 02:24:35
【问题描述】:
我最近开始使用 .NET Core 3.1,因为我有 .NET 背景,只是想在新框架中对 MVC 控制器进行单元测试。
在 .NET 中创建一个 MVC 网站,用于提供添加单元测试项目的选项,而 Core 没有;所以我遵循了一些指南,并将这个简单的测试放在 MSTest 中,用于HomeController 索引视图。
HomeController.cs:
public class HomeController : Controller
{
public IActionResult Index()
{
return this.View();
}
}
HomeControllerTests.cs:
[TestMethod]
public void WhenIndexIsExecutedAsyncThenContentShouldBeReturned()
{
// arrange
var httpContext = new DefaultHttpContext();
var controller = new HomeController()
{
ControllerContext = new ControllerContext
{
HttpContext = httpContext
}
};
var actionContext = new ActionContext
{
HttpContext = httpContext
};
// act
var result = controller.Index().ExecuteResultAsync(actionContext);
// assert
Assert.IsNotNull(result);
Assert.IsNull(result.Exception);
}
我收到一个错误:
值不能为空。 (参数“提供者”)
而且我不知道是什么导致了错误。
【问题讨论】:
-
您实际上想用您的简化示例测试什么?这看起来像是在尝试测试框架代码。
-
我想测试视图渲染的内容。
-
这需要独立单元测试中不可用的框架代码。通常使用视图引擎启动并运行的集成测试来测试它
-
哦,好的,请问您知道任何用于示例实现的好资源吗?
-
这是一篇关于Unit test controller logic in ASP.NET Core的文章,您也可以查看该文章中的示例代码:
var mockRepo = new Mock<IBrainstormSessionRepository>(); mockRepo.Setup(repo => repo.ListAsync()) .ReturnsAsync(GetTestSessions()); var controller = new HomeController(mockRepo.Object); // Act var result = await controller.Index(); // Assert var viewResult = Assert.IsType<ViewResult>(result);
标签: c# asp.net-mvc asp.net-core mstest