我手上有一个非常常见的场景,涉及两个同名的操作方法 - 一个用于处理POST请求,另一个用于处理GET请求:
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Add(Question question)
{
repository.Add(question);
return RedirectToAction("Index");
}
如您所见,动作方法通过属性进行区分。如果我删除HttpPost
属性,运行时将以黄色死亡屏幕崩溃。
我的问题是:编写使用反射验证此特定方法是否使用HttpPost
属性修饰的单元测试是否明智?我倾向于这样做,因为如果有人意外删除属性,服务器将崩溃。
答案 0 :(得分:1)
你的post方法在C#中已经有了不同的签名,所以你至少测试它是否存在。我认为这取决于测试人员的判断,但并非绝对必要。 GET
和POST
请求是网络固有的。
如果您决定这样做,您可以执行类似
的操作var postMethod = typeof(NameOfController).GetMethods().FirstOrDefault(p => p.GetCustomAttribute<HttpPost>(false) != null && p.Name == "Add");
Assert.IsTrue(postMethod != null);
它可能不会逐字编译,但这是它的要点。请务必添加System.Reflection
以使扩展方法生效。