我已經編輯和簡化了這個問題了很多。爲什麼這個asp.net mvc單元測試失敗?
如果我有我的HomeController這種方法:
public ActionResult Strangeness(int id)
{
StrangenessClass strangeness = null;
if(id == 1)
{
strangeness = new StrangenessClass() { Name="Strangeness", Desc="Really weird behavior" };
}
return View(strangeness);
}
而且有這個類:
public class StrangenessClass
{
public string Name { get; set; }
public string Desc { get; set; }
}
爲什麼這個單元測試失敗?
[TestMethod]
public void Strangeness()
{
HomeController controller = new HomeController();
ViewResult result = controller.Strangeness(1) as ViewResult;
var model = result.ViewData.Model;
result = controller.Strangeness(2) as ViewResult;
model = result.ViewData.Model;
Assert.IsNull(model);
}
我明白,通常情況下,我將有一個測試,測試空狀態,另一個測試了良好的條件,但我遇到了這個問題,同時測試我刪除控制器。在刪除測試中,我通常會獲取記錄,刪除記錄,然後嘗試再次獲取記錄。我第二次拿到它應該是空的,但事實並非如此。所以,我如上所述解決了問題。
如果這不是測試刪除的正確方法,那麼您會怎麼做?你不需要確保記錄實際上被刪除了嗎?
我發佈了兩個刪除控制器方法。第一個檢索要刪除的狀態,第二個post方法進行實際刪除。 _stateService變量是我的狀態服務的一個實例,它基於一個接口並將所有事情推遲到一個FakeStateRepoditory進行單元測試。我的TestInitialize設置所有這些,所以我已經爲每個測試組成了數據。該安排正在獲取我想刪除的記錄,該行爲正試圖刪除它,然後再次獲取它,並且該資產確保它爲空,並且我們被髮回到索引方法。 – 2010-05-22 16:59:22
爲了進一步說明,我確實有多個刪除測試,以確保第一個刪除控制器方法返回正確的視圖數據,以確保如果我嘗試刪除不存在的記錄,並將其重定向到適當的位置,等這個特殊的測試,確保記錄實際上被刪除。要做到這一點,我必須抓取它,發送它被刪除,並試圖再次抓取它,以確保它不見了。 – 2010-05-22 17:07:49
嘗試使用您的方法時,HomeController_Delete_Action_Handler_Should_Redirect_If_Model_Successfully_Delete測試中出現以下錯誤: 在結果的值集合中找不到名爲'controller'的參數。 如果將其更改爲: 實際 .AssertActionRedirect() .ToAction(「Index」); 它的工作原理。但是,我更喜歡你的方法。你知道我做錯了什麼嗎? – 2010-06-04 05:57:29