2016-09-19 15 views
0

I ma - блокнот с использованием NUnit и Fake it Easy для контроллеров MVC4. В одном из контроллеров я должен получить исключение.- это способ подделать класс Uri.

 ExceptionDetail exception = new ExceptionDetail() { Description = "Test", ErrorCode = ExceptionErrorCode.UserIsDisabled }; 
    Exception ex = new Exception(new Uri("http://localhost//Plat/ManagementSvc/Groups?UserID=" + iD "), exception); 

    A.CallTo(() => Fake.GetDataAsync<IEnumerable<Group>>(fakeHttpSession, url)).Throws(ex); 

Мой вопрос вместо передачи Localhost (новый Uri («http://localhost//Plat/ManagementSvc/Groups»), есть способ, чтобы фальсифицировать URL для URI

+0

Вы не выполняете никаких действий в Uri, а Uri не полагается на какие-либо внешние службы или что-нибудь. Почему именно вы хотите подделать его? Вы могли бы заменить фактический текст Uri на что-нибудь еще, если вам не нравится localhost (в стороне вы, вероятно, должны иметь только один «/» после «localhost», и у вас есть дополнительный '' 'после' iD' в ваш пример кода). Какова ваша цель? Что не работает для вас? –

ответ

0

Если проблема заключается в том, что исключение не генерируется, когда ваш производственный код вызывает GetDataAsync, это может быть просто то, что ваш код проходит в другом Uri. Если это так, вы можете изменить, какие триггеры Uri вызывают, используя другой формат: argument constraint.

Вместо того, чтобы сопоставлять Uri точно, вы можете выбрать любой Uri:

A.CallTo(() => Fake.GetDataAsync<IEnumerable<Group>>(fakeHttpSession, A<Uri>.Ignored)) 
    .Throws(ex); 

Или вы могли бы даже быть более конкретным:

A.CallTo(() => Fake.GetDataAsync<IEnumerable<Group>>(fakeHttpSession, A<Uri>.That.Matches(uri => uri.AbsolutePath == "/Plat/ManagementSvc/Groups")) 
    .Throws(ex); 

, если это то, что нужно. Есть много вариантов. Проверьте документацию.

Обратите внимание, что нет faking Uri здесь. Вы просто говорите FakeItEasy, какие тесты должны применяться к полученному Uri, чтобы решить, должен ли поддельный метод GetDataAsync