gpt4 book ai didi

c# - 使用 Sitecore.FakeDb 的单元测试在 GetItem 上抛出 Sitecore.Nexus 实例化错误

转载 作者:行者123 更新时间:2023-11-30 19:53:50 26 4
gpt4 key购买 nike

我是一名 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: 'The type initializer for 'Sitecore.SecurityModel.License.LicenseManager' threw an exception.'
InvalidOperationException: Could not instantiate the type '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 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'

最佳答案

您需要引用 Sitecore.nexus.dll

在 Visual Studio 中:工具 -> 选项

在选项窗口中找到'Nuget Package Manager'->'Package Sources' enter image description here

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

命名一个 - 任何你想要的。

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

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

enter image description here

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

关于c# - 使用 Sitecore.FakeDb 的单元测试在 GetItem 上抛出 Sitecore.Nexus 实例化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46288687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com