2009-10-29 155 views
0

我有以下的行動,我試着去單元測試:Asp.Net的mvc單元測試的控制器操作

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Default(ProductsViewModel model) 
    { 
     var locationId = model.LocationId; 
     var locationText = model.LocationText; 

     return locationId > 0 ? Summary(locationId, locationText, 1, "Date", true) : View(); 
    } 

如果視圖模型爲空,則返回只是一個視圖。但是如果它包含一個id,那麼摘要操作被調用並完成所有的工作(調用db,構建一個新的viewmodel等)。

但是我怎麼能在單元測試中斷言它被調用?

回答

2

大概你已經有了關於它應該做什麼的摘要測試。在這種情況下,我可能會選擇一些可以區分這兩者的東西,也就是說,只有在摘要已被調用並測試它的情況下才會是真的。例如,在Summary已被調用的情況下,您可以檢查非空模型,並且可能正確設置了Model屬性。我可以看到,唯一的另一種選擇是部分模擬控制器並設置該方法被調用的期望。

請注意,我並沒有假設你正在進行TDD,但如果你是這樣的話,那將是沒有意義的。如果你正在開發TDD,那麼你已經有很多測試的總結(可能),並且將會使用摘要作爲重構的結果。在這一點上,你現有的測試 - 和你的測試總結 - 可能就足夠了,你不需要任何進一步的測試。至少,您不需要複製Summary已經涵蓋的測試。