【发布时间】:2017-09-12 22:24:29
【问题描述】:
我是一名站点核心开发人员,我想创建一个示例站点核心螺旋单元测试项目来测试我们的“HomeBottomContentController”控制器:
public class HomeBottomContentController : GlassController
{
private readonly ISitecoreContext _iSitecoreContext;
public HomeBottomContentController(ISitecoreContext iSitecoreContext)
{
_iSitecoreContext = iSitecoreContext;
}
public override ActionResult Index()
{
var model = _iSitecoreContext.GetCurrentItem<Home_Control>();
return View("~/Views/HomeBottomContent/HomeBottomContent.cshtml", model);
}
}
我创建了一个 WTW.Feature.HomeBottomContent.Tests 项目,目的是使用 helix 单元测试来测试整个组件。其中我有一个 UnitTest1.cs 文件,其中包含以下内容:
namespace WTW.Feature.HomeBottomContent.Tests
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void Test_ISitecoreContextInsertion()
{
var iSitecoreContext = Mock.Of<Glass.Mapper.Sc.ISitecoreContext>();
HomeBottomContentController controllerUnderTest = new HomeBottomContentController(iSitecoreContext);
var result = controllerUnderTest.Index() as ViewResult;
Assert.IsNotNull(result);
}
}
}
这个测试确实通过了,这意味着“结果”不为空;但是,问题是当我进入 Index() 代码时,我看到“模型”变量在我们这样做时为 NULL
var model = _iSitecoreContext.GetCurrentItem<Home_Control>();
我的问题是,我该如何更改此代码以确保该行中的“模型”不会变为空?如何在 _iSitecoreContext 的单元测试代码中“模拟”一个项目,以便它有一个“Home_Control”模板,其字段的值是合法的?这甚至是正确的方法吗?我发现的大多数在线资源都没有类似的场景,我正在寻找尽可能短的代码。
我遇到的另一个问题是,我如何在 [TestMethod] 中测试下面的 Index() 方法,因为 SitecoreContext 是在 Index() 方法内部声明的,而不是在像上面的 HomeBottomContentController 构造函数?有没有办法从 [TestMethod] 中做到这一点,或者我们必须将 SitecoreContext 作为参数发送到 HomeBottomContentController 构造函数或 Index() 方法中?
public override ActionResult Index()
{
var context = new SitecoreContext();
var model = context.GetCurrentItem<Home_Control>();
return View("~/Views/HomeBottomContent/HomeBottomContent.cshtml", model);
}
【问题讨论】:
标签: c# moq sitecore8 sitecore-mvc glass-mapper