Я пытаюсь заглушить RestClient для возврата указанного c ответа на указанный c запрос, который распознается путем проверки конца используемого URL-адреса. Вот код, который я придумал:
_clientStub = Substitute.For<IRestClient>();
_responseStub = Substitute.For<IRestResponse>();
_clientStub
.Get(
Arg.Is<IRestRequest>(
request => request.Resource.EndsWith("config.json")
)
)
.Returns(_responseStub);
Я получаю NullReferenceException
для части Arg.Is<IRestRequest>
, и если я пытаюсь сохранить ее в переменной для повторного использования, как эта переменная оценивается как null
:
protected static readonly IRestRequest CONFIG_QUERY =
Arg.Is<IRestRequest>(
request => request.Resource.EndsWith("config.json")
);
Я следовал второму примеру в документации , поэтому я не совсем уверен, что происходит не так. Любая помощь?
Уточнение
Для воспроизводимости я создал минимальный пример:
[Fact]
public void StackOverflowTest()
{
RestSharp.IRestClient clientStub = Substitute.For<RestSharp.IRestClient>();
RestSharp.IRestResponse responseStub = Substitute.For<RestSharp.IRestResponse>();
clientStub
.Get(
Arg.Any<RestSharp.IRestRequest>()
)
.Returns(responseStub);
}
Да, в этом тесте нет утверждений. Я даже не получаю их в любом случае, так как последняя команда уже бросает и NullReferenceException
. Интерфейсы от RestSharp , но это не должно иметь большого значения.
Обновление
Чтобы сузить проблему, я создал еще более простой пример, и теперь он работает :
public interface IStackOverflowResponse { };
public interface IStackOverflowRequest { };
public interface IStackOverflowClient
{
IStackOverflowResponse Get(IStackOverflowRequest request);
}
[Fact]
public void StackOverflowTest()
{
IStackOverflowClient clientStub = Substitute.For<IStackOverflowClient>();
IStackOverflowResponse responseStub = Substitute.For<IStackOverflowResponse>();
clientStub
.Get(
Arg.Any<IStackOverflowRequest>()
)
.Returns(responseStub);
}
Так что теперь я предполагаю, что есть специфическая c проблема с насмешкой RestSharp.RestClient
. Я предполагаю, что проблема заключается в методах расширения насмешек / заглушек, поскольку IRestClient не имеет метода Get
сам по себе, но вместо этого есть метод расширения для него.