2010-03-23 9 views
0

Je fais de la maintenance sur une ancienne application web écrite en Monorail v1.0.3. Je veux tester une unité qui utilise RenderText(). Comment puis-je extraire le contenu de mon test? La lecture de controller.Response.OutputStream ne fonctionne pas, car le flux de réponse n'est pas correctement configuré dans PrepareController(), ou est fermé dans RenderText().Test de l'unité Méthode RenderText de Monorail

Exemple d'action

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

Exemple d'essai (en utilisant 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); 
} 

Répondre

3

Remplacer BaseControllerTest.BuildResponse() et fournir votre maquette de IMockResponse construit avec Moq.