Performing CreateTextResponse(...) in mocking WebOperationContext as in WebOperationContext

1.2k views Asked by At

I'm mocking the WebOperationContext class over wrapper for unit testing (using Moq). But I need to execute CreateTextResponse(...) method from WebOperationContext class in my mocked context for Message generation. Could you please give me any recommendation how to do that?

EDIT: Below is the current mock I am using for the WebOperationContext. However, I can't get to implement 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

There are 2 answers

3
PatrickSteele On BEST ANSWER

CreateTextResponse is not virtual so you can't mock it with moq. You'll probably want to create a wrapper around CreateTextResponse. You can mock the wrapper during unit testing, but delegate to the actual WebOperationContext at runtime.

1
Jeff Ogata On

You should take a look at WCFMock, which has an IWebOperationContext and WebOperationContextWrapper. These don't include the CreateTextResponse method, but you can use them as a starting point to save time. You'll also likely be able to make use of the other interfaces and wrappers.