使用 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, Func
1 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':
选择您要安装包的项目,然后单击“安装”按钮。
我是一名 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, Func
1 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':
选择您要安装包的项目,然后单击“安装”按钮。