如何从虚假网站获取Sitecore项目

时间:2017-01-16 12:42:15

标签: c# unit-testing sitecore

在单元测试中,我正在使用Sitecore.FakeDb

我已经扩展了示例以添加带有rootPath的fakeSite,并将其设置。 如果我尝试使用Context.Site.GetItem(rootPath)检索rootItem,则返回null。

[Test]
public void FakeSite()
{
    // create a fake site context
    var fakeSite = new Sitecore.FakeDb.Sites.FakeSiteContext(
      new Sitecore.Collections.StringDictionary
        {
                { "name", "website" }, { "database", "web" }, { "rootPath", "/sitecore/content/NL" }
        });

    // switch the context site
    using (new Sitecore.Sites.SiteContextSwitcher(fakeSite))
    {
        var rootItem = Context.Site.Database.GetItem(Context.Site.RootPath); // returns null

        Assert.IsNotNull(rootItem);
        Assert.AreEqual("website", Sitecore.Context.Site.Name);
        Assert.AreEqual("master", Sitecore.Context.Site.Database.Name);
    }
}

我错过了什么?

2 个答案:

答案 0 :(得分:3)

您需要先将虚假物品添加到假冒数据库中。

请参阅github的示例代码:

public void HowToCreateSimpleItem()
{
  using (Sitecore.FakeDb.Db db = new Sitecore.FakeDb.Db
    {
      new Sitecore.FakeDb.DbItem("Home") { { "Title", "Welcome!" } }
    })
  {
    Sitecore.Data.Items.Item home = db.GetItem("/sitecore/content/home");
    Xunit.Assert.Equal("Welcome!", home["Title"]);
  }
}

public void HowToCreateHierarchyOfItems()
{
  using (Sitecore.FakeDb.Db db = new Sitecore.FakeDb.Db
    {
      new Sitecore.FakeDb.DbItem("Articles")
        {
          new Sitecore.FakeDb.DbItem("Getting Started"),
          new Sitecore.FakeDb.DbItem("Troubleshooting")
        }
    })
  {
    Sitecore.Data.Items.Item articles =
      db.GetItem("/sitecore/content/Articles");

    Xunit.Assert.NotNull(articles.Children["Getting Started"]);
    Xunit.Assert.NotNull(articles.Children["Troubleshooting"]);
  }
}

https://github.com/sergeyshushlyapin/Sitecore.FakeDb/wiki/Creating-a-Simple-Item

https://github.com/sergeyshushlyapin/Sitecore.FakeDb/wiki/Creating-a-Hierarchy-of-Items

答案 1 :(得分:1)

正如@Marek所说,我没有创建一个项目,只需将rootPath设置为它应指向的项目。

这是工作测试。

t

虽然我意识到网站意味着CM / CD网站。不是我想要的MultiSite。