2010-02-25 55 views
15

我想單元測試下面的ASP.NET MVC控制器索引操作。我應該如何替換下面斷言中的實際參數(使用樁號?)。如何對返回ContentResult的ActionResult進行單元測試?

using System.Web.Mvc; 
namespace MvcApplication1.Controllers 
{ 
    public class StatusController : Controller 
    { 
     public ActionResult Index() 
     { 
      return Content("Hello World!"); 
     } 
    } 
} 


[TestMethod] 
public void TestMethod1() 
{ 
    // Arrange 
    var controller = CreateStatusController(); 

    // Act 
    var result = controller.Index(); 

    // Assert 
    Assert.AreEqual("Hello World!.", ?); 
} 

回答

20

使用「as」運算符進行可爲空的轉換。然後只需檢查空結果

[TestMethod] 
public void TestMethod1() 
{ 
    // Arrange 
    var controller = CreateStatusController(); 

    // Act 
    var result = controller.Index() as ContentResult; 

    // Assert 
    Assert.NotNull(result); 
    Assert.AreEqual("Hello World!.", result.Content); 
} 
4

你不能測試的結果是不爲空,您將收到一個ContentResult和比較值:

[TestMethod] 
public void TestMethod1() 
{ 
    // Arrange 
    var controller = CreateStatusController(); 

    // Act 
    var result = controller.Index(); 

    // Assert 
    Assert.NotNull(result); 
    Assert.IsAssignableFrom(typeof(ContentResult), result); 
    Assert.AreEqual("Hello World!.", result.Content); 
} 

我apoligize如果NUnit的斷言不welformed,而是把它看作僞代碼:)

11

我喜歡爲這類事情創建斷言助手。舉例來說,你可以這樣做:

public static class AssertActionResult { 
    public static void IsContentResult(ActionResult result, string contentToMatch) { 
     var contentResult = result as ContentResult; 
     Assert.NotNull(contentResult); 
     Assert.AreEqual(contentToMatch, contentResult.Content);   
    } 
} 

然後你會叫這個名字:

[TestMethod] 
public void TestMethod1() 
{ 
    var controller = CreateStatusController(); 
    var result = controller.Index(); 

    AssertActionResult.IsContentResult(result, "Hello World!");  
} 

我想,這使得測試,以便更易於讀取和寫入。

+0

這是一個好主意塞思。我有相當多的ContentResult單元測試代碼,所以這將有助於試圖遵循DRY哲學。 – 2010-02-25 20:21:27

+0

@尼古拉斯:很高興你發現它很有幫助。其他幫助程序是'AssertActionResult.IsRedirectTo(result,url)'和'AssertActionResult.IsViewResult(result,viewName)'。 – 2010-02-25 20:25:25

相關問題