如何用NUnit测试C#控制器CreateCategory方法的三种响应场景
C#单元测试:CreateCategory方法三种场景的测试实现
1. 测试ModelState无效的响应
要触发这种情况,直接给控制器的ModelState手动添加错误,模拟前端传入模型不符合验证规则的场景:
// 构造不完整的分类对象 var invalidCategory = new Category(); // 给控制器ModelState添加错误,模拟验证失败 _controller.ModelState.AddModelError("Name", "分类名称为必填项"); // 调用目标方法 var result = _controller.CreateCategory(invalidCategory); // 断言结果:返回ViewResult且ModelState无效 Assert.IsInstanceOf<ViewResult>(result); Assert.IsFalse(_controller.ModelState.IsValid);
2. 测试成功新增分类的响应
Mock依赖的数据服务(如ICategoryService),让其Add方法正常执行,模拟数据插入成功的场景:
// Mock分类服务,设置Add方法返回成功 var mockCategoryService = new Mock<ICategoryService>(); mockCategoryService.Setup(s => s.Add(It.IsAny<Category>())).Returns(true); // 初始化控制器并注入Mock服务 var controller = new CategoryController(mockCategoryService.Object); // 构造合法的分类对象 var validCategory = new Category { Name = "测试分类", Description = "测试描述" }; // 调用目标方法 var result = controller.CreateCategory(validCategory); // 断言结果:返回RedirectToActionResult,跳转到列表页(示例为Index) Assert.IsInstanceOf<RedirectToActionResult>(result); var redirectResult = (RedirectToActionResult)result; Assert.Equal("Index", redirectResult.ActionName); // 验证服务Add方法被调用一次 mockCategoryService.Verify(s => s.Add(validCategory), Times.Once);
3. 测试内部服务器错误的响应
Mock依赖服务,让其Add方法抛出异常,模拟数据插入时出现意外错误的场景:
// Mock分类服务,设置Add方法抛出异常 var mockCategoryService = new Mock<ICategoryService>(); mockCategoryService.Setup(s => s.Add(It.IsAny<Category>())).Throws(new Exception("数据库操作失败")); var controller = new CategoryController(mockCategoryService.Object); var validCategory = new Category { Name = "测试分类", Description = "测试描述" }; // 调用目标方法 var result = controller.CreateCategory(validCategory); // 断言结果:返回500状态码的StatusCodeResult Assert.IsInstanceOf<StatusCodeResult>(result); var statusCodeResult = (StatusCodeResult)result; Assert.Equal(500, statusCodeResult.StatusCode);
内容的提问来源于stack exchange,提问作者john otor
相关产品推荐
相关产品推荐

