2010-02-25 11 views
15

Quiero probar la unidad de la siguiente acción del índice del controlador ASP.NET MVC. ¿Qué debo reemplazar el parámetro actual en la declaración a continuación (tropezó con?).¿Cómo se prueba un ActionResult que devuelve un ContentResult?

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!.", ?); 
} 

Respuesta

20

utilice el operador "como" para realizar un lanzamiento que se pueda a nadir. A continuación, simplemente busque un resultado nulo

[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

Usted no puede prueba de que el resultado no es nulo, que recibe un ContentResult y comparar los valores:

[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); 
} 

I Apoligize si el Nunit según afirma, no se welformed, pero lo veo como pseudocódigo :)

11

Me gusta crear ayudantes de afirmación para este tipo de cosas. Por ejemplo, es posible hacer algo como:

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);   
    } 
} 

A continuación, podríamos llamar esto como:

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

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

Creo que esto hace que las pruebas de manera mucho más fácil de leer y escribir.

+0

Esa es una gran idea Seth. Tengo bastantes pruebas de la unidad ContentResult para codificar, así que esto ayudará a intentar mantener la filosofía DRY. –

+0

@Nicholas: Me alegro de que lo haya encontrado útil. Otros ayudantes que tengo son 'AssertActionResult.IsRedirectTo (result, url)' y 'AssertActionResult.IsViewResult (result, viewName)'. –

Cuestiones relacionadas