2009-11-18 17 views
0

在我的單元測試中,我發現當我使用沒有視圖名稱的View()從控制器操作返回時,ViewResult.ViewName被設置爲string.Empty。爲了設置它,必須將其指定爲View()調用的參數。例如,給出下面的單元測試:爲什麼不指定視圖名稱會導致我的單元測試失敗?

[TextFixture] 
public class MyControllerTests 
{ 
    [Test] 
    public void TestMyAction() 
    { 
     var controller = new MyController(); 
     var result = controller.MyAction(); 

     Assert.AreEqual("MyAction", result.ViewName); 
    } 
} 

以下行動的實施將導致單元測試失敗:

public class MyController : Controller 
{ 
    public ActionResult MyAction() 
    { 
     return View(); 
    } 
} 

,而這一次將傳遞:

public class MyController : Controller 
{ 
    public ActionResult MyAction() 
    { 
     return View("MyAction"); 
    } 
} 

我m在.NET 4.0上使用ASP.NET MVC 2(pre-beta)。但是,我沒有使用.NET 4.0特定的任何東西。我覺得這種行爲很奇怪,因爲我認爲ViewName是可以在單元測試的斷言中檢查的可靠屬性之一。

回答

3

這是ASP.NET MVC衆所周知的「特性」。自從第一個版本以來,Microsoft已經記錄它...

當沒有指定顯式視圖名稱時,框架試圖根據約定找到一個(在「Views \ controllername \ actionname」或「Shared \ controllername \ actionname」 )。 ViewName只有在你想偏離該慣例時纔有意義。所以你的單元測試會做出錯誤的假設。

HTH。

+0

我明白了。是否有推薦的文章/帖子/關於適當的斷言的任何內容? – alastairs 2009-11-18 17:22:21

+0

沒有一個。如果你的谷歌的「asp.net mvc單元測試」的東西,你會得到處理這個問題的數百篇文章/博客文章。 這完全取決於你想要測試什麼。 – 2009-11-19 02:29:17