我应该测试一个ASP MVC项目中的属性吗?
问题描述:
我有涉及到两个同名的操作方法在我的手一个很常见的场景 - 一个用于处理POST请求,另一个处理GET请求:我应该测试一个ASP MVC项目中的属性吗?
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Add(Question question)
{
repository.Add(question);
return RedirectToAction("Index");
}
正如你所看到的,操作方法是有区别的通过属性。如果我删除了HttpPost
属性,那么运行时将会以黄色屏幕死机而崩溃。
我的问题是:写一个单元测试使用反射来验证这个特定的方法是用HttpPost
属性装饰是否合理?我有这样做的意愿,因为如果有人意外删除了该属性,服务器将崩溃。
答
你的帖子方法在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
以使扩展方法正常工作。
你不会因为添加单元测试而伤害任何东西,但如果你认为有人可能会删除'HttpPost'属性,那么你应该和他们谈一谈。 – Jonesopolis 2014-11-23 23:18:27
@Jonesy我代码独奏,但你的评论确实与我产生共鸣。 – 2014-11-23 23:20:02
如果你为每一件可能出错的事情添加一个测试,你将花费大量的时间写测试......如果你没有问题,那么一定要......但是,你通常必须决定测试的最佳价值在哪里。 – 2014-11-24 00:13:31