Метод монорезового тестирования монорельсового тестирования

StackOverflow https://stackoverflow.com/questions/2501092

Вопрос

Я делаю какое -то обслуживание в более старом веб -приложении, написанном в Monorail V1.0.3. Я хочу, чтобы модульно проверить действие, которое использует rendertext (). Как извлечь контент в моем тесте? Чтение из Controller.Response.outputStream не работает, так как поток отклика либо не установлен должным образом в PrepareController (), либо закрыт в rendertext ().

Пример действия

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

Пример теста (с помощью 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 );
}
Это было полезно?

Решение

Переопределить BaseControllerTest.BuildResponse() и предоставьте свое издевательство над IMockResponse Построен с MOQ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top