【问题标题】:How to mock a data of Task<HttpResponseMessage>? C#如何模拟 Task<HttpResponseMessage> 的数据? C#
【发布时间】:2019-03-20 14:09:02
【问题描述】:

我正在尝试设置一个模拟函数,但我无法返回正确的数据 我收到以下错误:

Error CS1503 Argument 1: cannot convert from 'System.Net.Http.HttpResponseMessage' to 'System.Threading.Tasks.Task&lt;System.Net.Http.HttpResponseMessage&gt;'

这是我要模拟的界面

public interface ICouchDbClients
{
    Task<HttpResponseMessage> AuthenticatedQuery(Func<Task<HttpResponseMessage>> query, string name, HttpClient client);
}

这是我正在尝试的设置

var httpResponseMessage = new HttpResponseMessage
{
   StatusCode = HttpStatusCode.Created
};

mockStateFixture.MockCouchDbClient.Setup(x => x.AuthenticatedQuery(
    It.IsAny<Func<Task<HttpResponseMessage>>>(),
    NamedHttpClients.COUCHDB,
    httpClient))
    .Returns(httpResponseMessage);

【问题讨论】:

  • ReturnsAsync(httpResponseMessage);?
  • 我太笨了。我忘了它就是这么简单的哈哈

标签: c# unit-testing moq xunit


【解决方案1】:

使用ReturnsAsync返回Task&lt;T&gt;,试试这个:

mockStateFixture.MockCouchDbClient.Setup(x => x.AuthenticatedQuery(
    It.IsAny<Func<Task<HttpResponseMessage>>>(),
    NamedHttpClients.COUCHDB,
    httpClient))
    .ReturnsAsync(httpResponseMessage);

其实和Returns(Task.FromResult(httpResponseMessage))是一样的

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 2020-08-10
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    相关资源
    最近更新 更多