【发布时间】:2022-02-07 17:38:47
【问题描述】:
public async AddName(){
var requestUri = "someuri";
var payload = new AddNameRequest()
{
NameParts = new string[] { "Name001" },
Formula = string.Empty
};
// Act
var responseMessage = await this.httpClient.PostAsJsonAsync(requestUri, payload);
}
还有它的单元测试:
public async AddName_ExpectedBeh(){
//Create URI
//Create responseMessage
var mockHandler = new Mock<HttpMessageHandler>();
mockHandler.Protected()
.Setup<Task<HttpResponseMessage>>(
"SendAsync",
ItExpr.Is<HttpRequestMessage>(r => r.Method == responseMessage.RequestMessage.Method && r.RequestUri.ToString().EndsWith(responseMessage.RequestMessage.RequestUri.ToString())),
ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(responseMessage);
var httpClient = new HttpClient(mockHandler.Object);
//Pass HttpClient to Main Class
//Do Request
//Assert the response
}
上一个单元测试中的问题是我无法测试有效负载(请求正文)。我看到 mockHandler 可以读取 HttpRequestMessage,但我无法在 mockHandler.Setup() 之外读取它。那么有什么方法可以获取/测试 HttpRequestMessage,我该怎么做呢? 例如,我想检查请求正文是否包含“Name001”。
【问题讨论】:
标签: c# unit-testing mocking nunit httphandler