C# 单元测试ASP.NET Core 3.1 MVC控制器-值不能为空。(参数&x27;提供程序&x27;)
我最近开始使用.NET Core 3.1,之前我有.NET背景,只是想在新框架中对MVC控制器进行单元测试 在.NET中创建一个MVC网站,用于提供添加单元测试项目的选项,而Core没有;因此,我遵循了一些指南,并在MSTest中为C# 单元测试ASP.NET Core 3.1 MVC控制器-值不能为空。(参数&x27;提供程序&x27;),c#,asp.net-mvc,asp.net-core,mstest,C#,Asp.net Mvc,Asp.net Core,Mstest,我最近开始使用.NET Core 3.1,之前我有.NET背景,只是想在新框架中对MVC控制器进行单元测试 在.NET中创建一个MVC网站,用于提供添加单元测试项目的选项,而Core没有;因此,我遵循了一些指南,并在MSTest中为HomeController索引视图组合了这个简单的测试 HomeController.cs: public class HomeController : Controller { public IActionResult Index() {
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);
}
我得到一个错误:
值不能为null。(参数“provider”)
我不知道是什么原因导致了这个错误。为了实现我想要实现的目标,也就是说,一个简单的测试返回带有某些内容的视图(后者属于集成测试),这段代码对于第一个测试就足够了。第一次尝试时,我的实现过于复杂
[TestMethod]
public void WhenIndexIsExecutedAsyncThenViewShouldNotBeNull()
{
// arrange
var controller = new HomeController();
// act
var result = controller.Index() as ViewResult;
// assert
Assert.IsNotNull(result);
}
您实际想用简化的示例测试什么?这看起来像是在尝试测试框架代码。我想测试视图呈现的内容。这需要独立单元测试中不可用的框架代码。我们通常会在视图引擎启动并运行的集成测试中测试这一点哦,好的,您知道示例实现有什么好的资源吗?下面是一篇关于的文章,您还可以查看该文章中的示例代码:
var mockRepo=new Mock();mockRepo.Setup(repo=>repo.ListAsync()).ReturnsAsync(GetTestSessions());var controller=新的HomeController(mockRepo.Object);//Act var result=WAIT controller.Index();//Assert var viewResult=Assert.IsType(结果)代码>