2014-11-23 76 views
3

我有涉及到两个同名的操作方法在我的手一个很常见的场景 - 一个用于处理POST请求,另一个处理GET请求:我应该测试一个ASP MVC项目中的属性吗?

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

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

正如你所看到的,操作方法是有区别的通过属性。如果我删除了HttpPost属性,那么运行时将会以黄色屏幕死机而崩溃。

我的问题是:写一个单元测试使用反射来验证这个特定的方法是用HttpPost属性装饰是否合理?我有这样做的意愿,因为如果有人意外删除了该属性,服务器将崩溃。

+2

你不会因为添加单元测试而伤害任何东西,但如果你认为有人可能会删除'HttpPost'属性,那么你应该和他们谈一谈。 – Jonesopolis 2014-11-23 23:18:27

+0

@Jonesy我代码独奏,但你的评论确实与我产生共鸣。 – 2014-11-23 23:20:02

+0

如果你为每一件可能出错的事情添加一个测试,你将花费大量的时间写测试......如果你没有问题,那么一定要......但是,你通常必须决定测试的最佳价值在哪里。 – 2014-11-24 00:13:31

回答

1

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

如果你决定这样做,你可以这样做

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

它可能无法编译逐字但是这是它的要点。确保添加System.Reflection以使扩展方法正常工作。

相关问题