2012-01-05 54 views
1

這裏創建一個簡單的單元測試的麻煩是單元測試:在MVC3應用

[TestFixture] 
public class HomeControllerTests 
{ 
    [Test] 
    public void Index_GET_Asks_For_Index_View() 
    { 
     HomeController controller = new HomeController(); 
     ViewResult result = controller.Index(); 
     Assert.AreEqual("Index", result.ViewName); 
    } 
} 

基本上我要確保當我訪問Index操作方法,我調用正確的觀點。但是,測試失敗,我不知道爲什麼。

------測試開始:大會:Demo.Tests.dll ------

測試 'Demo.Tests.HomeControllerTests.Index_GET_Asks_For_Index_View' 失敗:

期望的字符串長度5,但是0字符串在預期索引0

不同: 「索引」

但是:-----------^HomeControllerTests.cs(19,0) :在 Demo.Tests.HomeControllerTests.Index_GET_Asks_For_Index_View()

下面是實際的控制器代碼:

public ViewResult Index() 
{ 
    ViewBag.Message = "This is just a demo."; 
    return View(); 
} 
+0

它看起來像你的期望,你真的有一個字符串長度爲零,這使得'ViewName'看起來像一個空字符串。我的猜測是,在'ViewName'的分辨率空當,解析爲正確的'ViewName'在此之後。 – 2012-01-05 15:57:44

+0

之後? -padding- – 2012-01-05 15:59:18

+0

查看我的回答。 'ViewName'將是空的11次中有10 – 2012-01-05 16:01:39

回答

2

See this reference with an empty call to View()。下面是從MSDN文章報價:

此方法的View類的過載返回一個ViewResult對象 ,其具有ViewName屬性如果你正在寫的 控制器動作單元測試,考慮到空VIEWNAME屬性不接受字符串視圖名 單元測試。

+0

好了,解決的辦法是,在你的控制,而不是做'返回查看()'你需要去'返回查看(「指數」)'是明確的。現在測試通過了。謝謝! – 2012-01-05 16:07:30

+2

@SergioTapia,不,這不是解決辦法。解決方法是斷言單元測試中的視圖名稱是一個空字符串:'Assert.AreEqual(string.Empty,result.ViewName);'根據文檔將意味着控制器操作返回了默認視圖。引用:'考慮到空VIEWNAME屬性不採取串視圖name' – 2012-01-05 16:17:14

+0

我與達林的建議,同意單元測試。即使在TDD中,您也不必爲了單元測試成功而編寫重複代碼。寫單元測試成功。對達林的偉大建議。 – 2012-01-05 16:21:41