2015-05-21 2 views
2

Есть ли простой способ издеваться над классом UrlResolver? Я передаю его как параметр конструктору.EpiServer - простой способ издеваться над UrlResolver

public Service(UrlResolver urlResolver){ 
    _urlResolver = urlResolver; 
} 

EDIT: По Хенрик Н. комментарию, этот вопрос был рассмотрен в EPiServer 8.

Но пока я не иметь EPiServer 8 в моем решении я буду использовать пользовательский интерфейс + адаптер.

+0

Обратите внимание, что проблема с издевательским UrlResolver была адресована в EPiServer.CMS.Core 8.0.0, изменив класс как абстрактный базовый класс без каких-либо зависимостей. –

+0

Если это так, то этот вопрос устарел. Пожалуйста, добавьте ответ, и я буду отмечать его как правильный ответ. –

ответ

2

Зависимость, которая вызывает вопрос был удален в версии 8.0.0 от EPiServer.CMS.Core, так что если вы можете обновить до последней версии, вы должны быть хорошо.

0

Да. Используя отличный FakeItEasy насмешливый библиотеку, это так же просто, как:

UrlResolver fakeUrlResolver = A.Fake<UrlResolver>(); 

Затем использовать его, чтобы создать экземпляр Service.

var myService = new Service(fakeUrlResolver); 

Если вам нужна подделка для возврата по специальным вызовам метода, это тоже возможно. Скажем, код получает общедоступный URL-адрес для PageReference.

PageReference myLink = new PageReference(123); 
UrlResolver fakeUrlResolver = A.Fake<UrlResolver>(); 
A.CallTo(() => fakeUrlResolver.GetUrl(myLink)).Returns("my/fake/url"); 

// probably initialize some other code with myLink at this point 

var myService = new Service(fakeUrlResolver); 
+0

Вы опротестовывали этот код? Я попробовал использовать Rhino Mocks для его исправления, но он вызывает исключение, потому что конструктор по умолчанию для UrlResolver разрешает пару зависимостей от ServiceLocator и вызывает проблемы. –

+0

Я написал этот ответ на основе кода, который работает. Что с этим связано Rhino Mocks? – dancek

+0

О, я прочитал другие комментарии. Я, очевидно, тестировал это только на некоторых версиях. – dancek

1

Я в конечном итоге создать свой собственный интерфейс IUrlResolver и адаптер для UrlResolver.

public interface IUrlResolver 
{ 
    string GetUrl(ContentReference contentReference, Language language); 
} 

public class UrlResolverAdapter : IUrlResolver 
{ 
    public string GetUrl(ContentReference contentReference, Language language) 
    { 
     return UrlResolver.Current.GetUrl(contentReference, language); 
    } 
} 
+0

Да, это путь для большинства (если не всех) EPiServers тесно связанного беспорядка ... –