Выполнение CreateTextResponse (...) в фиктивном WebOperationContext, как в WebOperationContext - PullRequest
3 голосов
/ 15 октября 2011

Я издеваюсь над классом WebOperationContext над оболочкой для модульного тестирования (используя Moq).Но мне нужно выполнить метод CreateTextResponse (...) из класса WebOperationContext в моем поддельном контексте для генерации сообщений.Не могли бы вы дать мне какие-либо рекомендации, как это сделать?

РЕДАКТИРОВАТЬ : Ниже приведен текущий макет, который я использую для WebOperationContext.Тем не менее, я не могу реализовать CreateTextResponse / CreateStreamResponse.

public IAsyncResult BeginGetData(AsyncCallback asyncCallback, object asyncState)
public Message EndGetData(IAsyncResult asyncResult)

public class OperationContextMock : IOperationContext
{
    public HttpCookieCollection Cookies { get; set; }

    public Message CreateStreamResponse(Action<System.IO.Stream> streamWriter, string contentType)
    {
        throw new NotImplementedException();
    }

    public Message CreateTextResponse(string text, string contentType)
    {
        // How to mock this method so that it returns a Message object?
    }

    public string LookupRequestParameter(RequestParameter requestParameter)
    {
        throw new NotImplementedException();
    }

    public NameValueCollection QueryParameters { get; set; }

    public NameValueCollection RequestHeaders { get; set; }

    public Uri RequestUri { get; set; }

    public string ResponseContentType { get; set; }

    public string ResponseLocation { get; set; }

    public HttpStatusCode ResponseStatusCode { get; set; }

    public CatalogServiceOperationContextMock()
    {
        this.ResponseStatusCode = HttpStatusCode.OK;
    }
}

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

CreateTextResponse не является виртуальным, поэтому вы не можете высмеивать его с помощью moq. Вы, вероятно, захотите создать оболочку вокруг CreateTextResponse. Вы можете смоделировать оболочку во время модульного тестирования, но делегировать фактическому WebOperationContext во время выполнения.

0 голосов
/ 16 октября 2011

Вы должны взглянуть на WCFMock , который имеет IWebOperationContext и WebOperationContextWrapper. К ним не относится метод CreateTextResponse, но вы можете использовать их в качестве отправной точки для экономии времени. Вы также, вероятно, сможете использовать другие интерфейсы и оболочки.

...