2010-02-25 52 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

相关问题