Pregunta

Estoy haciendo un mantenimiento en una aplicación web anterior escrita en Monorail v1.0.3. Quiero probar una acción que usa Rendertext (). ¿Cómo extrajo el contenido en mi prueba? Lectura de Controller.Response.outputStream no funciona, ya que el flujo de respuesta no está configurado correctamente en PrepareController () o está cerrado en Rendertext ().

Acción de ejemplo

public DeleteFoo( int id )
{
    var success= false;
    var foo = Service.Get<Foo>( id );
    if( foo != null && CurrentUser.IsInRole( "CanDeleteFoo" ) )
    {
        Service.Delete<Foo>( id );
        success = true;
    }

    CancelView();
    RenderText( "{ success: " + success + " }" );
}

Prueba de ejemplo (usando MOQ)

[Test]
public void DeleteFoo()
{
    var controller = new FooController ();
    PrepareController ( controller );

    var foo = new Foo { Id = 123 };

    var mockService = new Mock < Service > ();
    mockService.Setup ( s => s.Get<Foo> ( foo.Id ) ).Returns ( foo );
    controller.Service = mockService.Object;

    controller.DeleteTicket ( foo.Id );

    mockService.Verify ( s => s.Delete<Foo> ( foo.Id ) );
    Assert.AreEqual ( "{success:true}", GetResponse ( Response ) );
}

// response.OutputStream.Seek throws an "System.ObjectDisposedException: Cannot access a closed Stream." exception
private static string GetResponse( IResponse response )
{
    response.OutputStream.Seek ( 0, SeekOrigin.Begin );
    var buffer = new byte[response.OutputStream.Length];
    response.OutputStream.Read ( buffer, 0, buffer.Length );
    return Encoding.ASCII.GetString ( buffer );
}
¿Fue útil?

Solución

Anular BaseControllerTest.BuildResponse() y proporcione su simulacro de IMockResponse construido con moq.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top