EpiServer - 模拟 UrlResolver 的简单方法
EpiServer - easy way to mock UrlResolver
有没有简单的方法来模拟 UrlResolver class?
我将它作为参数传递给构造函数。
public Service(UrlResolver urlResolver){
_urlResolver = urlResolver;
}
编辑:
根据 Henrik N. 的评论,此问题已在 EpiServer 8 中得到解决。
但在我的解决方案中使用 EpiServer 8 之前,我将使用自定义接口 + 适配器。
是的。使用优秀的 FakeItEasy 模拟库,就像:
UrlResolver fakeUrlResolver = A.Fake<UrlResolver>();
然后用它来实例化你的Service
。
var myService = new Service(fakeUrlResolver);
如果您需要在特定方法调用上伪造 return,那也是可能的。比如说,代码为 PageReference
.
获取 public 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);
我最终为 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);
}
}
导致问题的依赖项已在 EPiServer.CMS.Core 的 8.0.0 版中删除,因此如果您可以更新到最新版本,应该没问题。
有没有简单的方法来模拟 UrlResolver class? 我将它作为参数传递给构造函数。
public Service(UrlResolver urlResolver){
_urlResolver = urlResolver;
}
编辑: 根据 Henrik N. 的评论,此问题已在 EpiServer 8 中得到解决。
但在我的解决方案中使用 EpiServer 8 之前,我将使用自定义接口 + 适配器。
是的。使用优秀的 FakeItEasy 模拟库,就像:
UrlResolver fakeUrlResolver = A.Fake<UrlResolver>();
然后用它来实例化你的Service
。
var myService = new Service(fakeUrlResolver);
如果您需要在特定方法调用上伪造 return,那也是可能的。比如说,代码为 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);
我最终为 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);
}
}
导致问题的依赖项已在 EPiServer.CMS.Core 的 8.0.0 版中删除,因此如果您可以更新到最新版本,应该没问题。