【发布时间】:2015-05-12 00:24:01
【问题描述】:
我在尝试将 Moq 与 RestSharp 结合使用时遇到了一些挑战。也许这是我对 Moq 的误解,但由于某种原因,我在尝试模拟 RestResponse 时不断收到空引用异常。
这是我的单元测试。
[Test]
public void GetAll_Method_Throws_exception_if_response_Data_is_Null()
{
var restClient = new Mock<IRestClient>();
restClient.Setup(x => x.Execute(It.IsAny<IRestRequest>()))
.Returns(new RestResponse<RootObjectList>
{
StatusCode = HttpStatusCode.OK,
Content = null
} );
var client = new IncidentRestClient(restClient.Object);
Assert.Throws<Exception>(() => client.GetAll());
}
这是我的实际实现:
public class IncidentRestClient : IIncidentRestClient
{
private readonly IRestClient client;
private readonly string url = "some url here";
public IncidentRestClient()
{
client = new RestClient { BaseUrl = new Uri(url) };
}
public RootObjectList GetAll()
{
var request = new RestRequest("api/now/table/incident", Method.GET) { RequestFormat = DataFormat.Json };
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
IRestResponse<RootObjectList> response = client.Execute<RootObjectList>(request);
if (response.Data == null)
throw new Exception(response.ErrorException.ToString());
return response.Data;
}
}
由于某种原因,响应对象为空。会不会是我错误地模拟了返回对象?
【问题讨论】:
-
什么是“IncidentRestClient”?是你定义的类型吗?
-
嗨,肖恩。是的,这是我定义的类型。请参阅上面的编辑。
-
看起来你的
IncidentRestClient的构造函数没有将IRestClient作为参数。是否定义了另一个接受该参数的构造函数?