我应该在 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 属性修饰的单元测试是否明智?我倾向于这样做,因为如果有人意外删除了该属性,服务器将崩溃。

我应该在 ASP MVC 项目中测试属性吗?

你的post方法在C#中已经有一个不同的签名,所以你至少在测试它的存在。我认为这是由测试人员自行决定的,但不是绝对必要的。 GETPOST请求是 Web 固有的。

如果你决定这样做,你可以做一些类似的事情

var postMethod = typeof(NameOfController).GetMethods().FirstOrDefault(p => p.GetCustomAttribute<HttpPost>(false) != null && p.Name == "Add");
Assert.IsTrue(postMethod != null);

它可能不会逐字汇编,但这就是它的要点。请确保添加System.Reflection以使扩展方法正常工作。