Frage

Ich mache einige Wartung an einer älteren Webanwendung in Monorail V1.0.3. Ich möchte eine Aktion testen, bei der RenderText () verwendet wird. Wie extrahiere ich den Inhalt in meinem Test? Das Lesen von Controller.Response.OutputStream funktioniert nicht, da der Antwortstrom entweder in PrepareController () entweder nicht ordnungsgemäß eingerichtet ist oder in RenderText () geschlossen ist.

Beispielaktion

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

Beispieltest (mit 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 );
}
War es hilfreich?

Lösung

Überschreiben BaseControllerTest.BuildResponse() und liefern Sie Ihren Mock von IMockResponse gebaut mit Moq.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top