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

use*_*243 3 c# moq sitecore-mvc glass-mapper sitecore8

我是一名 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");
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试上述两行 .GetItem(...) 行时,出现以下错误:

System.TypeInitializationException: 'The type initializer for 'Sitecore.SecurityModel.License.LicenseManager' threw an exception.'
InvalidOperationException: Could not instantiate the type 'Sitecore.Nexus.Licensing.NexusLicenseApi, Sitecore.Nexus'
Run Code Online (Sandbox Code Playgroud)

我在我的单元测试项目中包含了以下相关参考文献(除其他外):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>
Run Code Online (Sandbox Code Playgroud)

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

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

System.TypeInitializationException occurred
  HResult=0x80131534
  Message=The type initializer for 'Sitecore.SecurityModel.License.LicenseManager' threw an exception.
  Source=Sitecore.Kernel
  StackTrace:
   at Sitecore.SecurityModel.License.LicenseManager.DemandRuntime(Boolean acceptExpress)
   at Sitecore.Data.Managers.DefaultItemManager.get_FallbackProvider()
   at Sitecore.Data.Managers.DefaultItemManager.<>c__DisplayClass2f.<GetItem>b__2e()
   at Sitecore.Data.Managers.DefaultItemManager.ExecuteAndReturnResult[TArgs,TResult](String pipelineName, String pipelineDomain, Func`1 pipelineArgsCreator, Func`1 fallbackResult)
   at Sitecore.Data.Managers.DefaultItemManager.GetItem(ID itemId, Language language, Version version, Database database, SecurityCheck securityCheck)
   at Sitecore.Data.Managers.DefaultItemManager.GetItem(ID itemId, Language language, Version version, Database database)
   at Sitecore.Data.Managers.ItemManager.GetItem(ID itemId, Language language, Version version, Database database)
   at Sitecore.Data.DefaultDatabase.GetItem(ID itemId)
   at Sitecore.FakeDb.Db.GetItem(ID id)
   at WTW.Feature.HomeBottomContent.Tests.UnitTest1.Test_ArticleController_With_SitecoreItem() in C:\dev\TowersWatson\DEV\Maintenance\Source\Feature\HomeBottomContent\Tests\UnitTest1.cs:line 76

Inner Exception 1:
InvalidOperationException: Could not instantiate the type 'Sitecore.Nexus.Licensing.NexusLicenseApi, Sitecore.Nexus'
Run Code Online (Sandbox Code Playgroud)

Ale*_*nko 5

您需要引用 Sitecore.nexus.dll

在 Visual Studio 中:工具->选项

在“选项”窗口中找到“Nuget Package Manager”->“Package Sources” 在此输入图像描述

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

说出一个 - 无论你想要什么。

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

之后,转到“工具”->“Nuget 包管理器”->“管理解决方案的 Nuget 包...”在右上角的“包源”下拉列表中,选择仅添加源。就我而言,它是“Sitecore”。在搜索字段中输入“Sitecore.Nexus.Noreferences”:

在此输入图像描述

选择要安装包的项目并单击安装按钮。