EpiServer语言 - 简单的方式模拟url解析器



是否有一个简单的方法来模拟UrlResolver类?我把它作为参数传递给构造函数。

public Service(UrlResolver urlResolver){
    _urlResolver = urlResolver;
}
编辑:

根据Henrik N.的评论,这个问题已经在EpiServer 8中得到了解决。

但在我的解决方案中有EpiServer 8之前,我将使用自定义接口+适配器。

导致该问题的依赖项已在episserver . cms . core的8.0.0版本中删除,因此如果您可以更新到最新版本,则应该没问题。

我最终为UrlResolver创建了自己的IUrlResolver接口和适配器。

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);
    }
}

是。使用优秀的FakeItEasy mock库,就像:

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

然后使用它来实例化您的Service

var myService = new Service(fakeUrlResolver);

如果您需要在特定方法调用时返回false,这也是可能的。例如,代码获取PageReference的公共URL。

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);

最新更新