Как правильно создать заглушку / макет для свойства Scheme в Uri в Rhinomocks? - PullRequest
1 голос
/ 16 апреля 2019

Я пишу пример модульного теста для метода ac # с помощью фреймворка Rhinomocks.Внутри моего фактического метода я получаю доступ к свойству Scheme из свойства Uri , представленного в пространстве имен System.Net.Http.HttpRequestMessage.

Свойство схемы доступно как _requestContext.RequestMessage.RequestUri.Scheme в фактическом методе.

Когда я запускаю мой модульный тестовый пример, он падает внутри моего фактического метода реализации, когда он пытается получить доступ / прочитать схемуproperty.

Чтобы смоделировать свойства URI и Scheme, я попробовал, как показано ниже, но он не работает должным образом.

var uri = new Uri("http://tempuri.org/");
//requestContext.Expect(r => r.RequestMessage.RequestUri).Return(uri).Repeat.Any();

requestContext.Stub(x => x.RequestMessage.RequestUri).Return(uri);

requestContext.Stub(x => x.RequestMessage.RequestUri.Scheme).Return("http");//this is the value the scheme should return when it is accessed inside the actual method

Как правильно создать заглушку/ mock для свойства Scheme в Uri.

Примечание. Я имею в виду свойство Uri в пространстве имен System.Net.Http.HttpRequestMessage.

1 Ответ

0 голосов
/ 16 апреля 2019

Бетон Uri, используемый в вашем примере, будет включать схему. Не надо издеваться над этим.

var uri = new Uri("http://tempuri.org/");

var scheme = uri.Scheme; //return "http"    

requestContext.Stub(x => x.RequestMessage.RequestUri).Return(uri);

Таким образом, вызов RequestMessage.RequestUri.Scheme вернет схему из бетона Uri. Который в этом случае будет http, как вы уже знаете и указали в своем исходном сообщении.

Также, основываясь на вашем комментарии к моему первоначальному предложению, я предлагаю вам создать фактический HttpRequestMessage и заполнить его по мере необходимости.

var uri = new Uri("http://tempuri.org/");
var request = new HttpRequestMessage(HttpMethod.Get, uri);

requestContext.Stub(x => x.RequestMessage).Return(request);

Теперь нет необходимости высмеивать что-либо еще, связанное с запросом, поскольку используется фактическая реализация.

...