2

有没有一种简单的方法来模拟 UrlResolver 类?我将它作为参数传递给构造函数。

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

编辑: 根据 Henrik N. 的评论,此问题已在 EpiServer 8 中得到解决。

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

4

3 回答 3

2

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

于 2015-05-22T10:50:25.277 回答
1

我最终为 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);
    }
}
于 2015-05-21T10:12:57.027 回答
0

是的。使用优秀的FakeItEasy 模拟库,它很简单:

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

然后用它来实例化你的Service.

var myService = new Service(fakeUrlResolver);

如果您需要假的来返回特定的方法调用,那也是可能的。比如说,代码获取一个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);
于 2015-05-21T09:59:28.060 回答