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

时间:2014-11-23 22:55:30

标签: c# asp.net-mvc unit-testing tdd

我手上有一个非常常见的场景,涉及两个同名的操作方法 - 一个用于处理POST请求,另一个用于处理GET请求:

public ActionResult Add()
{
    return View();
}

[HttpPost]
public ActionResult Add(Question question)
{
    repository.Add(question);
    return RedirectToAction("Index");
}

如您所见,动作方法通过属性进行区分。如果我删除HttpPost属性,运行时将以黄色死亡屏幕崩溃。

我的问题是:编写使用反射验证此特定方法是否使用HttpPost属性修饰的单元测试是否明智?我倾向于这样做,因为如果有人意外删除属性,服务器将崩溃。

1 个答案:

答案 0 :(得分:1)

你的post方法在C#中已经有了不同的签名,所以你至少测试它是否存在。我认为这取决于测试人员的判断,但并非绝对必要。 GETPOST请求是网络固有的。

如果您决定这样做,您可以执行类似

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

它可能不会逐字编译,但这是它的要点。请务必添加System.Reflection以使扩展方法生效。