Prueba unitaria del método de RenderAly de Monorail
-
21-09-2019 - |
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 );
}
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