RenderTertext -Methode von Unit Testing Monorail
-
21-09-2019 - |
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 );
}
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