使用 Sitecore.FakeDb 的单元测试在 GetItem 上引发 Sitecore.Nexus 实例化错误

Unit Testing Using Sitecore.FakeDb Throws Sitecore.Nexus instantiation error on GetItem

我是一名 sitecore 开发人员,我想在我的单元测试中使用 Sitecore.FakeDb。我有以下代码:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void Test_ArticleController_With_SitecoreItem()
    {
        Sitecore.Data.ID about_us_itemId = Sitecore.Data.ID.NewID;
        Sitecore.Data.ID careers_itemId = Sitecore.Data.ID.NewID;

        using (var db = new Sitecore.FakeDb.Db
        {
            new Sitecore.FakeDb.DbItem("about-us", about_us_itemId)
            {
                new Sitecore.FakeDb.DbField(SitecoreFieldIds.WTW_REDIRECT_TO) { Value = "/WTW-Home/about-us/overview" }
            },
            new Sitecore.FakeDb.DbItem("careers", careers_itemId)
            {
                new Sitecore.FakeDb.DbField(SitecoreFieldIds.WTW_REDIRECT_TO) { Value = "http://careers.willistowerswatson.com" }
            }
        })
        {
            Sitecore.Data.Items.Item sampleItem3 = db.GetItem(about_us_itemId); // throws error
            Sitecore.Data.Items.Item sampleItem2 = db.GetItem("/sitecore/content/careers"); //throws error

            //Assert
            Assert.AreEqual("abc", "abc");
        };
    }
}

当我尝试上面两个 .GetItem(...) 行中的任何一个时,出现以下错误:

System.TypeInitializationException:“'Sitecore.SecurityModel.License.LicenseManager' 的类型初始值设定项引发了异常。” InvalidOperationException:无法实例化类型 'Sitecore.Nexus.Licensing.NexusLicenseApi, Sitecore.Nexus'

我在我的单元测试项目中包含了以下相关参考资料(除其他外):Sitecore.FakeDb、Sitecore.Kernel、Sitecore.Mvc、Moq、Glass.Mapper、Glass.Mapper.Sc, Glass.Mapper.Sc.Mvc, Castle.Core.我需要 Sitecore.Nexus 吗?如果是,我可以从哪里得到它?

我有一个 App_Config/Include/Sitecore.FakeDb.config 文件,还有一个 App_Config/app.config 文件,里面有这个设置:

<sitecore>
<settings>
    <setting name="LicenseFile" value="..\..\license.xml" />
</settings>
</sitecore>

知道为什么会出现此错误以及如何准确修复它吗?

这是完整的堆栈跟踪,如果有帮助的话:

System.TypeInitializationException发生 HResult=0x80131534 Message='Sitecore.SecurityModel.License.LicenseManager' 的类型初始值设定项抛出异常。 来源=Sitecore.Kernel 堆栈跟踪: 在 Sitecore.SecurityModel.License.LicenseManager.DemandRuntime(布尔 acceptExpress) 在 Sitecore.Data.Managers.DefaultItemManager.get_FallbackProvider() 在 Sitecore.Data.Managers.DefaultItemManager.<>c__DisplayClass2f.b__2e() 在 Sitecore.Data.Managers.DefaultItemManager.ExecuteAndReturnResult[TArgs,TResult](String pipelineName, String pipelineDomain, Func1 pipelineArgsCreator, Func1 fallbackResult) 在 Sitecore.Data.Managers.DefaultItemManager.GetItem(ID itemId, Language 语言, Version 版本, Database 数据库, SecurityCheck securityCheck) at Sitecore.Data.Managers.DefaultItemManager.GetItem(ID itemId, Language 语言, Version 版本, Database 数据库) at Sitecore.Data.Managers.ItemManager.GetItem(ID itemId, Language 语言, Version 版本, Database 数据库) 在 Sitecore.Data.DefaultDatabase.GetItem(ID itemId) 在 Sitecore.FakeDb.Db.GetItem(ID id) 在 WTW.Feature.HomeBottomContent.Tests.UnitTest1.Test_ArticleController_With_SitecoreItem() 在 C:\dev\TowersWatson\DEV\Maintenance\Source\Feature\HomeBottomContent\Tests\UnitTest1.cs:line 76

内部异常 1: InvalidOperationException:无法实例化类型 'Sitecore.Nexus.Licensing.NexusLicenseApi, Sitecore.Nexus'

Sitecore.Nexus 程序集位于您的 Sitecore 网站的 Bin 文件夹中。从您的测试项目中添加对此程序集的引用。

您需要参考 Sitecore.nexus.dll

在 Visual Studio 中:工具 -> 选项

在选项 window 中找到 'Nuget Package Manager'->'Package Sources'

然后单击绿色加号并填写名称和来源文本字段。

随便说一个吧。

源文本字段填充“https://sitecore.myget.org/F/sc-packages/api/v3/index.json

之后转到工具->Nuget 包管理器->管理解决方案的 Nuget 包... 在右上角的 'Package source' 下拉菜单中选择仅添加源。在我的例子中是 'Sitecore'。在搜索字段中输入 'Sitecore.Nexus.Noreferences':

选择您要安装包的项目,然后单击“安装”按钮。