Unit testing Sharp architecture 2.0单元测试

Unit testing Sharp architecture 2.0单元测试,unit-testing,nhibernate,s#arp-architecture,Unit Testing,Nhibernate,S#arp Architecture,我只是想测试一些涉及数据库的验证。我的测试代码的设置如下所示: [TestFixture] public class UserValidatorTester : RepositoryTestsBase { [SetUp] public void Setup() { ServiceLocatorInitializer.Init(); base.SetUp(); } ... public class ServiceLoc

我只是想测试一些涉及数据库的验证。我的测试代码的设置如下所示:

[TestFixture]
public class UserValidatorTester : RepositoryTestsBase
{
    [SetUp]
    public void Setup()
    {
        ServiceLocatorInitializer.Init();
        base.SetUp(); 
    }


...
    public class ServiceLocatorInitializer
        {
            public static void Init() 
            {
                IWindsorContainer container = new WindsorContainer();

                container.Register(
                        Component
                            .For(typeof(IEntityDuplicateChecker))
                            .ImplementedBy(typeof(EntityDuplicateChecker))
                            .Named("entityDuplicateChecker"));

container.Register(Component.For(typeof(ISessionFactoryKeyProvider)).ImplementedBy(typeof(DefaultSessionFactoryKeyProvider)).Named("sessionFactoryKeyProvider"));


                ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
            }
        }
ServiceLocator初始值设定项如下所示:

[TestFixture]
public class UserValidatorTester : RepositoryTestsBase
{
    [SetUp]
    public void Setup()
    {
        ServiceLocatorInitializer.Init();
        base.SetUp(); 
    }


...
    public class ServiceLocatorInitializer
        {
            public static void Init() 
            {
                IWindsorContainer container = new WindsorContainer();

                container.Register(
                        Component
                            .For(typeof(IEntityDuplicateChecker))
                            .ImplementedBy(typeof(EntityDuplicateChecker))
                            .Named("entityDuplicateChecker"));

container.Register(Component.For(typeof(ISessionFactoryKeyProvider)).ImplementedBy(typeof(DefaultSessionFactoryKeyProvider)).Named("sessionFactoryKeyProvider"));


                ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
            }
        }
我得到:

at SharpArch.Domain.SafeServiceLocator`1.GetService()
位于SharpArch.NHibernate.SessionFactoryKeyHelper.GetKeyFrom(对象anObject) 在SharpArch.NHibernate.NHibernateRepositoryWithTypedId
2.get_Session()中
在C:\Users\csetzkorn\Documents\Visual Studio 2010\Projects\EID2\Solutions\EID2.Tasks\Repositories\UserRepository.SaveOrUpdate(用户实体)中的EID2.Tasks.Repositories.UserRepository.SaveOrUpdate(用户实体):第17行
在C:\Users\csetzkorn\Documents\Visual Studio 2010\Projects\EID2\Solutions\EID2.Tasks\UserTasks.CreateUser(CreateUserViewModel CreateUserViewModel)中的EID2.Tasks.UserTasks.CreateUser(CreateUserViewModel CreateUserViewModel):第33行
在C:\Users\csetzkorn\Documents\Visual Studio 2010\Projects\EID2\Solutions\EID2.Tests\Validation\UserValidatorTester.LoadTestData()中的EID2.Tests.ValidatorTester.LoadTestData()处
在SharpArch.Testing.NUnit.NHibernate.RepositoryTestsBase.SetUp()中
--NullReferenceException
在Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current()上
在SharpArch.Domain.SafeServiceLocator上
1.GetService()

基督教徒

附言:

包括DLL:

<ItemGroup>
    <Reference Include="Castle.Core">
      <HintPath>..\..\Packages\Castle.Core.2.5.2\lib\SL4\Castle.Core.dll</HintPath>
    </Reference>
    <Reference Include="Castle.Windsor">
      <HintPath>..\..\Packages\Castle.Windsor.2.5.3\lib\NET40\Castle.Windsor.dll</HintPath>
    </Reference>
    <Reference Include="CommonServiceLocator.WindsorAdapter">
      <HintPath>..\..\Packages\CommonServiceLocator.WindsorAdapter.1.0\lib\NET35\CommonServiceLocator.WindsorAdapter.dll</HintPath>
    </Reference>
    <Reference Include="EID2.Tasks">
      <HintPath>..\xxx.Tasks\bin\Debug\xxx.Tasks.dll</HintPath>
    </Reference>
    <Reference Include="FluentValidation, Version=2.0.0.0, Culture=neutral, PublicKeyToken=a82054b837897c66, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\Packages\FluentValidation\FluentValidation.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Practices.ServiceLocation">
      <HintPath>..\..\Packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll</HintPath>
    </Reference>
    <Reference Include="MvcContrib.TestHelper">
      <HintPath>..\..\Packages\MvcContrib.Mvc3-ci.3.0.68.0\lib\MvcContrib.TestHelper.dll</HintPath>
    </Reference>
    <Reference Include="NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\ReferencedAssemblies\NHibernate\NHibernate.dll</HintPath>
    </Reference>
    <Reference Include="NHibernate.ByteCode.Castle">
      <HintPath>..\..\ReferencedAssemblies\NHibernate\NHibernate.ByteCode.Castle.dll</HintPath>
    </Reference>
    <Reference Include="NHibernate.Validator">
      <HintPath>..\..\ReferencedAssemblies\NHibernate\NHibernate.Validator.dll</HintPath>
    </Reference>
    <Reference Include="nunit.framework">
      <HintPath>..\..\Packages\NUnit.2.5.10.11092\lib\nunit.framework.dll</HintPath>
    </Reference>
    <Reference Include="Rhino.Mocks">
      <HintPath>..\..\ReferencedAssemblies\RhinoMocks\Rhino.Mocks.dll</HintPath>
    </Reference>
    <Reference Include="SharpArch.Domain">
      <HintPath>..\..\ReferencedAssemblies\SharpArchitecture\SharpArch.Domain.dll</HintPath>
    </Reference>
    <Reference Include="SharpArch.NHibernate">
      <HintPath>..\..\ReferencedAssemblies\SharpArchitecture\SharpArch.NHibernate.dll</HintPath>
    </Reference>
    <Reference Include="SharpArch.Testing">
      <HintPath>..\..\ReferencedAssemblies\SharpArchitecture\SharpArch.Testing.dll</HintPath>
    </Reference>
    <Reference Include="SharpArch.Testing.NUnit">
      <HintPath>..\..\ReferencedAssemblies\SharpArchitecture\SharpArch.Testing.NUnit.dll</HintPath>
    </Reference>
    <Reference Include="SharpArch.Tests">
      <HintPath>..\..\ReferencedAssemblies\SharpArchitecture\SharpArch.Tests.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.ComponentModel.DataAnnotations" />
    <Reference Include="System.Core" />
    <Reference Include="System.Data.SQLite">
      <HintPath>..\..\Packages\System.Data.SQLite.1.0.66.0\lib\System.Data.SQLite.DLL</HintPath>
    </Reference>
    <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\ReferencedAssemblies\ASP.NET MVC\System.Web.Mvc.dll</HintPath>
    </Reference>
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>

..\..\Packages\Castle.Core.2.5.2\lib\SL4\Castle.Core.dll
..\..\Packages\Castle.Windsor.2.5.3\lib\NET40\Castle.Windsor.dll
..\..\Packages\CommonServiceLocator.WindsorAdapter.1.0\lib\NET35\CommonServiceLocator.WindsorAdapter.dll
..\xxx.Tasks\bin\Debug\xxx.Tasks.dll
假的
..\..\Packages\FluentValidation\FluentValidation.dll
..\..\Packages\CommonServiceLocator.1.0\lib\NET35\Microsoft.Practices.ServiceLocation.dll
..\..\Packages\MvcContrib.Mvc3 ci.3.0.68.0\lib\MvcContrib.TestHelper.dll
假的
..\..\ReferencedAssemblys\NHibernate\NHibernate.dll
..\..\ReferencedAssemblys\NHibernate\NHibernate.ByteCode.Castle.dll
..\..\ReferencedAssemblys\NHibernate\NHibernate.Validator.dll
..\..\Packages\NUnit.2.5.10.11092\lib\NUnit.framework.dll
..\..\ReferenceAssemblys\RhinoMocks\Rhino.Mocks.dll
..\..\ReferencedAssembly\SharpArchitecture\SharpArch.Domain.dll
..\..\ReferencedAssembly\SharpArchitecture\SharpArch.NHibernate.dll
..\..\ReferencedAssembly\SharpArchitecture\SharpArch.Testing.dll
..\..\ReferenceAssemblys\SharpArchitecture\SharpArch.Testing.NUnit.dll
..\..\ReferencedAssembly\SharpArchitecture\SharpArch.Tests.dll
..\..\Packages\System.Data.SQLite.1.0.66.0\lib\System.Data.SQLite.DLL
假的
..\..\ReferenceAssemblys\ASP.NET MVC\System.Web.MVC.dll
缴费灵:

sql精简配置

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
        <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
        <property name="connection.connection_string">Data Source=:memory:;Version=3;New=True;</property>
        <property name="connection.release_mode">on_close</property>
        <property name="show_sql">true</property>
        <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    </session-factory>
</hibernate-configuration>

NHibernate.Connection.DriverConnectionProvider
NHibernate.dialogue.sqlitedialogue
NHibernate.Driver.SQLite20Driver
数据源=:内存:;版本=3;新=正确;
闭上
真的
NHibernate.ByteCode.Castle.proxyFactory,NHibernate.ByteCode.Castle

问题是无法创建NHibernate会话工厂。阅读错误消息:

 System.ArgumentException : Unable to find the requested .Net Framework Data Provider.  It may not be installed.
您的项目中是否包含SQLLite dll

System.Data.SQLite.dll


sqlite可能会出现一些问题,不同的问题有不同的解决方案,我认为您遇到的问题是因为sqlite.dll是针对.net System.Data构建的,而您拥有的是.net 4 System.Data,请尝试添加:

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>

到test app.config中的配置元素


此外,如果您在x64计算机上,并且正在引用x86 sqlite,则需要将测试程序集的目标框架更改为x86(右键单击项目,选择属性,生成选项卡,然后选择x86作为目标框架)

确保您已将nhibernate配置包括到单元测试项目中。这是def。包含在sql Lite中可能是NHibernate.Driver.SQLite20Driver是用于.net 2.0的,我正在使用4.0或类似的东西?奇怪-您能列出单元测试项目的Bin文件夹中的所有文件吗(当然除了您自己的自定义DLL)。谢谢。正在获取,但现在获取:ServiceLocator尚未初始化;我试图检索SharpArch.NHibernate.ISessionFactoryKeyProvider-->System.NullReferenceException:对象引用未设置为对象的实例。在SharpArch.Domain.SafeServiceLocator
1.GetService()在SharpArch.NHibernate.SessionFactoryKeyHelper.GetKeyFrom(对象anObject)在SharpArch.NHibernate.NHibernateRepositoryWithTypedId
2.get_Session()等处。您需要确保DefaultSessionKeyProvider已向Windsor注册,确保您的ComponentRegistrator:
容器。注册(Component.For(typeof(ISessionFactoryKeyProvider))。由(typeof(DefaultSessionFactoryKeyProvider))实现。命名为(“sessionFactoryKeyProvider”)
或查看您之前问题之一的答案:谢谢chrisr我添加了此项,并获得问题中显示的错误(我已编辑了问题)。