You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:06:32