2014-11-23 82 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以使擴展方法正常工作。

相關問題