Unit test or response to the result of an ActionResult using ExecuteResult?

Question...

What is the best Unit Test way to answer string and content type from multiple controller methods?

Using...

Each method returns ActionResult, some of which are answers ViewResult. I am using ASP.NET MVC 2 RTM and Moq .

In particular...

I want to get TextWriterfrom HttpContext.Responseand contain the full answer of a string from ActionResult.

Why?

1. As part of unit tests

I want to check some specific if the content and does not exist with the exit.

2. Runtime via workflow

, . HTTP , .

, Runtime, Unit Tests, ?

1

, , RegisterRoutes RegisterAllAreas, , BuildManagerWrapper::IBuildManager.GetReferencedAssemblies.

:

public static HttpContextBase FakeHttpContext()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    var response = new Mock<HttpResponseBase>();
    var session = new Mock<HttpSessionStateBase>();
    var server = new Mock<HttpServerUtilityBase>();
    var writer = new StringWriter();

    var form = new NameValueCollection();
    var queryString = new NameValueCollection();
    request.Setup(r => r.Form).Returns(form);
    request.Setup(r => r.QueryString).Returns(queryString);

    context.Setup(ctx => ctx.Request).Returns(request.Object);
    context.Setup(ctx => ctx.Response).Returns(response.Object);
    context.Setup(ctx => ctx.Session).Returns(session.Object);
    context.Setup(ctx => ctx.Server).Returns(server.Object);
    context.Setup(ctx => ctx.Response.Output).Returns(writer);

    return context.Object;
}

public static void SetFakeControllerContext(this Controller controller)
{
    var httpContext = FakeHttpContext();
    var routeData = new RouteData();
    var routeData = RouteTable.Routes.GetRouteData(httpContext);
    ControllerContext context = new ControllerContext(new RequestContext(httpContext, routeData), controller);
    controller.ControllerContext = context;
}

TestMethod :

[TestMethod]
public void CodedJavaScriptAction_Should_Return_JavaScript_Response()
{
    // Arrange
    var controller = new CodedController();
    controller.SetFakeControllerContext();

    // Act
    var result = controller.CodedJavaScript(); // Response is made up as a ViewResult containing JavaScript.
    var controllerContext = controller.ControllerContext;
    var routeData = controllerContext.RouteData;
    routeData.DataTokens.Add("area", "Coded");
    routeData.Values.Add("area", "Coded");
    routeData.Values.Add("controller", "Coded");
    routeData.Values.Add("action", "CodedJavaScript");

    var response = controllerContext.HttpContext.Response;
    response.Buffer = true;
    var vr = result as ViewResult;
    vr.MasterName = "CodedJavaScript";

    result.ExecuteResult(controllerContext);

    // Assert
    var s = response.Output.ToString();
    Assert.AreEqual("text/javascript", response.ContentType);
    Assert.IsTrue(s.Length > 0);
    // @todo: Further tests to be added here.   

}

, :

- Areas\Coded\Controllers\CodeController.cs
- Areas\Coded\Views\Coded\CodedJavaScript.aspx
- Areas\Coded\CodedAreaRegistration.cs
- Views\Shared\CodedJavaScript.Master

: , Runtime. @Darin Dimitrov Integration Testing, .

EDIT. MvcIntegrationTestFramework alexn. AppDomain.CreateDomain SimpleWorkerRequest , , , - static. , .

, , , Partial View ?

+5
2

, , , , , , , Selenium - Ultimate Visual Studio.

, . , . , , , , , .

+3

Steven Sandersons MvcIntegrationTestFramework . .

, viewdataโ€‹โ€‹strong > , , .

HTML , :

[Test]
public void Output_Contains_String()
{
    appHost.SimulateBrowsingSession(session => {
        var result = session.ProcessRequest("/");
        Assert.IsTrue(result.ResponseText.Contains("string to check for"));
    });
}

. .

, .

, , .

+2

All Articles