Модульный тест RestSharp NUnit Moq Исключение нулевой ссылки RestResponse

У меня возникли проблемы с попыткой использовать 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;
    }
}

По какой-то причине объект ответа имеет значение null. Может быть, я неправильно издеваюсь над возвращаемым объектом?


person jaypman    schedule 11.05.2015    source источник
comment
Что такое IncidentRestClient? Это тип, который вы определили?   -  person Sean H    schedule 11.05.2015
comment
Привет, Шон. Да, это тип, который я определил... см. редактирование выше.   -  person jaypman    schedule 11.05.2015
comment
Похоже, что конструктор вашего IncidentRestClient не принимает IRestClient в качестве параметра. Определен ли другой конструктор, который принимает этот параметр?   -  person Marc Harry    schedule 11.05.2015


Ответы (1)


В целях раскрытия информации я предполагаю, что ваш IncidentRestClient имеет конструктор, который принимает экземпляр IRestClient в качестве параметра и использует его для установки члена client.

Похоже, что в вашем тесте вы запускаете программу установки для другой перегрузки Execute, чем та, которую вы используете. Вместо:

.Setup(x => x.Execute(

пытаться:

.Setup(x => x.Execute<RootObjectList>(
person Sean H    schedule 11.05.2015
comment
Привет, Шон. Большое спасибо!! :) Не могу поверить, что проглядел эту перегрузку в программе установки. Теперь я возвращаю объект RestReponse. - person jaypman; 11.05.2015
comment
Да, у него есть конструктор public IncidentRestClient(IRestClient client) { this.client = client; } - person jaypman; 11.05.2015
comment
@jaypman Вы должны принять этот ответ, если он был правильным/полезным. Было бы неплохо проголосовать. Вот как это работает. - person Todd Menier; 16.05.2015
comment
@ToddMenier Я не могу проголосовать в данный момент, потому что мне нужно как минимум 15 очков репутации. - person jaypman; 27.05.2015