如何在单元测试期间设置HttpResponseMessage的内容?

ank*_*kur 2 c# moq xunit .net-core

我正在编写一个单元测试,其中我正在测试连接到外部服务的服务。

服务代码:

var request = new APIRequest
{
    Query = query
};

var response = await _httpService.SendRequestAsync(_configuration.ApiUrl, HttpMethod.Post, request, _configuration.Username, _configuration.Password);

if (response.IsSuccessStatusCode)
{
    var result = await response.Content.ReadAsAsync<Result>();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我为上述服务方法编写的单元测试。

public async void GetPerformance_OKResults()
{
    //ARRANGE
    var resultToReturn = MockedEntitiesRepository.mockNetworkResult;
    HttpResponseMessage mockResponse = new HttpResponseMessage(System.Net.HttpStatusCode.OK);
    mockResponse.Content = new ObjectContent(Type.GetType(resultToReturn), resultToReturn, MediaTypeFormatter.)

    mockHttpService.Setup(s => s.SendRequestAsync(applicationConfiguration.Object.Value.ApiUrl, HttpMethod.Post, It.IsAny<object>(), applicationConfiguration.Object.Value.Username, applicationConfiguration.Object.Value.Password)).Returns(Task.FromResult(mockResponse));

    service = new Service(applicationConfiguration.Object, mockHttpService.Object, mockLogger.Object, mockCacheService.Object);

    //ACT
    var result = await Service.GetPerformance(It.IsAny<long>(), It.IsAny<DateTimeOffset>(), It.IsAny<DateTimeOffset>(), It.IsAny<string>());

    // ASSERT
    Assert.Collection(result, item => Assert.Equal(something, something));
}
Run Code Online (Sandbox Code Playgroud)

我想使用单元测试中的mockResponse 对象设置对象 HTTPResponseMessage 内容resultToReturn ,以便当代码进行实际调用时,它能够设置该值,并且我可以对结果进行断言。

我该如何设置该值?

mm8*_*mm8 9

我该如何设置该值?

将属性设置ContentStringContent包含 JSON 序列化的a Result,例如:

var result = new Result();
...
mockResponse.Content = new StringContent(JsonConvert.SerializeObject(result));
Run Code Online (Sandbox Code Playgroud)