我有一个依赖于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 是成功的响应代码。