我应该在 ASP MVC 项目中测试属性吗?
本文关键字:测试 属性 项目 ASP MVC 我应该 | 更新日期: 2023-09-27 18:31:43
我手上有一个非常常见的场景,涉及两个同名的操作方法 - 一个用于处理 POST 请求,另一个用于处理 GET 请求:
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Add(Question question)
{
repository.Add(question);
return RedirectToAction("Index");
}
如您所见,操作方法通过属性进行区分。如果我删除 HttpPost
属性,运行时将崩溃并显示黄色死机屏幕。
我的问题是:编写一个使用反射来验证此特定方法是否使用 HttpPost
属性修饰的单元测试是否明智?我倾向于这样做,因为如果有人意外删除了该属性,服务器将崩溃。
你的post方法在C#中已经有一个不同的签名,所以你至少在测试它的存在。我认为这是由测试人员自行决定的,但不是绝对必要的。 GET
和POST
请求是 Web 固有的。
如果你决定这样做,你可以做一些类似的事情
var postMethod = typeof(NameOfController).GetMethods().FirstOrDefault(p => p.GetCustomAttribute<HttpPost>(false) != null && p.Name == "Add");
Assert.IsTrue(postMethod != null);
它可能不会逐字汇编,但这就是它的要点。请确保添加System.Reflection
以使扩展方法正常工作。