如何设置 IHttpClientAdapter.GetAsync 以返回具有 IsSuccessStatusCode 特



我有一个依赖于IHttpClientAdapter的类,我用它来调用RESTful API。

我对使用依赖项的方法进行了测试,所以我正在使用Moq嘲笑IHttpClientAdapter。测试应检查当GetAsync方法返回任何不成功的响应时,是否发生了某些事情。

我可以做的一件事是创建一个新的HttpResponseMessage,如下所示:

var response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.InternalServerError
};

然后设置模拟依赖项以返回如下:

_httpClientAdapterMock.Setup(x => x.GetAsync(new Uri("http://someuri"))).ReturnsAsync(response);

在这种情况下,IsSuccessfulStatusCode的计算结果为 false,因此测试如预期的那样通过。

但是,这个测试并不像我希望的那样强大,因为它只检查一个特定的响应代码。我真正想做的是将IsSuccessfulStatusCode设置为 false。所以像这样:

var response = new HttpResponseMessage
{
IsSuccessStatusCode = false // cannot do this, as IsSuccessStatusCode is readonly
};

我尝试扩展HttpResponseMessage(名为FakeHttpResponseMessage(,创建该类的实例并将IsSuccessStatusCode属性设置为 true,然后设置 mock 以返回该属性,但IsSuccessStatusCode属性在运行测试时计算结果为true,因此它没有达到预期的效果。

如何实现这一点,而不必测试每一个可能的不成功HttpStatusCode

它可能是类似于设置响应状态 = 200 因为 200 是成功的响应代码。

最新更新