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)
您需要引用 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”:
选择要安装包的项目并单击安装按钮。