Sitecore FakeDB 测试的最小 Nugets 足迹是多少?

What is the minimum Nugets footprint for Sitecore FakeDB tests?

我从标准 Sitecore.KernelSitecore.Nexus 开始。 Sitecore 在这里给出了非常描述性的错误消息,所以我也添加了 DependencyInjection。它带来了很多依赖关系,它们没有显示在下面的配置中。如您所见,我使用 *.NoReferences 版本的 Sitecore 包来控制依赖项。

<packages>
  <package id="Microsoft.Extensions.DependencyInjection" version="1.0.0" targetFramework="net452" />
  <package id="Sitecore.FakeDb" version="1.2.2" targetFramework="net452" />
  <package id="Sitecore.Kernel.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Nexus.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
</packages>

之后我卡住了。我收到一个错误,没有提供太多关于遗漏内容的线索:

System.NullReferenceException : Object reference not set to an instance of an object.
    at Sitecore.Configuration.DefaultFactory.CreateType(XmlNode configNode, String[] parameters, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.CreateFromTypeName(XmlNode configNode, String[] parameters, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper)
    at Sitecore.Configuration.DefaultFactory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.CreateObject(String configPath, String[] parameters, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.CreateObject(String configPath, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.GetDatabase(String name, Boolean assert)
    at Sitecore.Configuration.DefaultFactory.GetDatabase(String name)
    at Sitecore.Configuration.Factory.GetDatabase(String name)
    at Sitecore.Data.Database.GetDatabase(String databaseName)
    at Sitecore.FakeDb.Db..ctor(String databaseName)
    at Sitecore.FakeDb.Db..ctor()
    at SitecoreTests.Class1.HowToCreateSimpleItem() in C:\prog\temp\SitecoreTests\SitecoreTests\Class1.cs:line 17

那么,让简单的假数据库测试工作还缺少什么?

在完整尝试所有引用为依赖项的包后 Sitecore.Kernel 我以这个设置结束:

<packages>
  <package id="Lucene.Net" version="3.0.3" targetFramework="net452" />
  <package id="Microsoft.Extensions.DependencyInjection" version="1.0.0" targetFramework="net452" />
  <package id="Sitecore.FakeDb" version="1.2.2" targetFramework="net452" />
  <package id="Sitecore.Kernel.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Logging.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Nexus.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
</packages>

现在很清楚,如果没有 Sitecore.Logging,Sitecore 就无法启动。

Lucene.Net 也是必需的,但它的错误更有帮助:

System.IO.FileNotFoundException : Could not load file or assembly 'Lucene.Net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181' or one of its dependencies. The system cannot find the file specified.

P.S。如果您不关心引用额外的 DLL,您可以只添加两个包来让您测试工作 - Sitecore.Nexus(没有 .NoReferences)和 Microsoft.Extensions.DependencyInjection

这是我在 Fortis 单元测试项目中使用的包列表:

<packages>
  <package id="AutoFixture" version="3.0.1" targetFramework="net452" />
  <package id="Lucene.Net" version="3.0.3" targetFramework="net452" />
  <package id="Microsoft.AspNet.Mvc" version="3.0.50813.1" targetFramework="net452" />
  <package id="Microsoft.AspNet.Razor" version="1.0.20105.408" targetFramework="net452" />
  <package id="Microsoft.AspNet.WebPages" version="1.0.20105.408" targetFramework="net452" />
  <package id="Microsoft.Extensions.DependencyInjection" version="1.0.0" targetFramework="net452" />
  <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="1.0.0" targetFramework="net452" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" />
  <package id="NSubstitute" version="1.10.0.0" targetFramework="net452" />
  <package id="RazorGenerator.Mvc" version="2.4.7" targetFramework="net452" />
  <package id="SharpZipLib" version="0.86.0" targetFramework="net452" />
  <package id="Sitecore.Abstractions.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Analytics.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Buckets.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.ContentSearch.Linq.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.ContentSearch.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.FakeDb" version="1.1.3" targetFramework="net452" />
  <package id="Sitecore.FakeDb.AutoFixture" version="1.1.3" targetFramework="net452" />
  <package id="Sitecore.FakeDb.NSubstitute" version="1.1.3" targetFramework="net452" />
  <package id="Sitecore.FakeDb.Serialization" version="1.1.3" targetFramework="net452" />
  <package id="Sitecore.Kernel.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Logging.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="Sitecore.Nexus.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
  <package id="System.Collections" version="4.0.11" targetFramework="net452" />
  <package id="System.Collections.Concurrent" version="4.0.12" targetFramework="net452" />
  <package id="System.ComponentModel" version="4.0.1" targetFramework="net452" />
  <package id="System.Diagnostics.Debug" version="4.0.11" targetFramework="net452" />
  <package id="System.Globalization" version="4.0.11" targetFramework="net452" />
  <package id="System.Linq" version="4.1.0" targetFramework="net452" />
  <package id="System.Linq.Expressions" version="4.1.0" targetFramework="net452" />
  <package id="System.Reflection" version="4.1.0" targetFramework="net452" />
  <package id="System.Resources.ResourceManager" version="4.0.1" targetFramework="net452" />
  <package id="System.Runtime.Extensions" version="4.1.0" targetFramework="net452" />
  <package id="System.Threading" version="4.0.11" targetFramework="net452" />
  <package id="System.Threading.Tasks" version="4.0.11" targetFramework="net452" />
  <package id="WebActivatorEx" version="2.0.3" targetFramework="net452" />
  <package id="xunit" version="2.1.0" targetFramework="net452" />
  <package id="xunit.abstractions" version="2.0.0" targetFramework="net452" />
  <package id="xunit.assert" version="2.1.0" targetFramework="net452" />
  <package id="xunit.core" version="2.1.0" targetFramework="net452" />
  <package id="xunit.extensibility.core" version="2.1.0" targetFramework="net452" />
  <package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net452" />
  <package id="xunit.runner.visualstudio" version="2.1.0" targetFramework="net452" />
</packages>

还要确保您的 /App_Config/Include 文件夹设置适用于您的配置:Here is the Fortis one