我手上有一个非常常见的场景,涉及两种同名的操作方法-一种用于处理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
使扩展方法起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句