【问题标题】:Are there any ways to get/test the actual request body in Mock HttpMessageHandler?有什么方法可以在 Mock HttpMessageHandler 中获取/测试实际的请求正文?
【发布时间】: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


    【解决方案1】:

    有效负载在 Setup 方法中可用。你可以测试它的方法是你可以添加一个方法,你可以用它来测试你想要的东西。例如

    public async Task<bool> IsRequestValid(HttpRequestMessage requestMessage)
    {
        string stringContent = await requestMessage.Content.ReadAsStringAsync();
        
        // Example of some validation...
        return stringContent.Contains("myProperty");
    }
    

    如果此方法返回 true,则 mockHandler 将返回所需的消息,如果不是,则返回默认值(null)。这样您就可以知道您的请求是正确的。或者,通过此方法,您可以抛出异常或 Assert.False()。

    您可以使用 &amp;&amp; IsRequestValid(r.Content) 在现有的 Setup 表达式中附加此检查。

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      相关资源
      最近更新 更多