4

我在单元测试的包装器上模拟 WebOperationContext 类(使用 Moq)。但是我需要在我的模拟上下文中执行来自 WebOperationContext 类的 CreateTextResponse(...) 方法以生成消息。你能给我任何建议吗?

编辑:下面是我用于 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;
    }
}
4

2 回答 2

3

CreateTextResponse不是虚拟的,所以你不能用最小起订量来模拟它。您可能希望在CreateTextResponse. WebOperationContext您可以在单元测试期间模拟包装器,但在运行时委托给实际包装器。

于 2011-10-15T18:21:20.220 回答
0

你应该看看WCFMock,它有一个IWebOperationContextand WebOperationContextWrapper。这些不包括CreateTextResponse方法,但您可以将它们用作节省时间的起点。您还可能能够使用其他接口和包装器。

于 2011-10-15T22:04:13.280 回答