我正在使用Sitecore.FakeDB为我的Sitecore编写单元测试。我想模拟RenderingContext,以设置当前项目的“渲染参数”或数据源。

但是,当调用RenderingContext.Current时,我的单元测试崩溃并显示以下错误:

Test method YourAssembly.YourClass.YourTest threw exception:
System.InvalidOperationException: Attempt to retrieve context object of type 'Sitecore.Mvc.Presentation.RenderingContext' from empty stack.


模拟Sitecore.FakeDB支持的RenderingContext吗?

如果不支持,我将使用Marc Duiker's blog从我的代码中抽象出对RenderingContext的调用

最佳答案

如何使用RenderingContext.EnterContext。像这样:

Item datasourceContextItem = db.GetItem("/sitecore/content/some/stuff");

using (RenderingContext.EnterContext(new Rendering(), datasourceContextItem))
{

    IMyViewModelRepository repository = new MyViewModelRepository();
    MyController controller = new MyController(repository);

    ViewResult view = (ViewResult)controller.Index();

    ((MyViewModel)view.Model).MyHtmlStringProperty.ToString().Should().Be("some value");
}

关于unit-testing - 使用Sitecore.FakeDB模拟RenderingContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32826406/

10-10 10:56