2010-02-25 5 views
15

Ich möchte die folgende ASP.NET MVC-Controller-Indexaktion testen. Was ersetze ich den eigentlichen Parameter in der unten stehenden Assert (stubbed mit?).Wie Unit-Test ein ActionResult, das ein ContentResult zurückgibt?

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

Antwort

20

Verwenden Sie den "as" -Operator, um eine NULL-fähige Besetzung zu erstellen. Dann einfach auf ein Null-Ergebnis prüfen

4

Sie kippt Test, dass das Ergebnis nicht null ist, dass Sie ein ContentResult und vergleichen die Werte erhalten:

[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 wenn die Nunit behauptet nicht welformed, aber es aussehen, als Pseudocode :)

11

Ich mag Assertion Helfer für diese Art von Sache zu erstellen. Zum Beispiel könnte man so etwas tun:

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

Sie würden diese dann wie nennen:

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

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

Ich denke, das die Tests so viel leichter zu lesen und schreiben macht.

+0

Das ist eine großartige Idee Seth. Ich habe einige der ContentResult-Komponententests zu codieren, so dass dies helfen wird, bei der DRY-Philosophie zu bleiben. –

+0

@Nicholas: Schön, dass Sie es hilfreich fanden. Weitere Helfer, die ich habe, sind 'AssertActionResult.IsRedirectTo (result, url)' und 'AssertActionResult.IsViewResult (result, viewName)'. –

Verwandte Themen