2011-06-27 7 views
2

私は、データベースを含むいくつかの検証をテストしようとしています。私のテストコードの設定は次のようになります。ServiceLocatorInitializerはこのようになりますシャープアーキテクチャー2.0ユニットテスト

[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で(Object anObject) at SharpArch.NHibernate.NHibernateRepositoryWithTypedId 2.get_Session() at EID2.Tasks.Repositories.UserRepository.SaveOrUpdate(User entity) in C:\Users\csetzkorn\Documents\Visual Studio 2010\Projects\EID2\Solutions\EID2.Tasks\Repositories\UserRepository.cs:line 17 at EID2.Tasks.UserTasks.CreateUser(CreateUserViewModel CreateUserViewModel) in C:\Users\csetzkorn\Documents\Visual Studio 2010\Projects\EID2\Solutions\EID2.Tasks\UserTasks.cs:line 33 at EID2.Tests.Validation.UserValidatorTester.LoadTestData() in C:\Users\csetzkorn\Documents\Visual Studio 2010\Projects\EID2\Solutions\EID2.Tests\Validation\UserValidatorTester.cs:line 39 at SharpArch.Testing.NUnit.NHibernate.RepositoryTestsBase.SetUp() --NullReferenceException at Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current() at SharpArch.Domain.SafeServiceLocator 1.GetService()

クリスチャン

PS:

付属の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> 

PPS:

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> 
+0

ユニットテストプロジェクトにnhibernate設定が含まれていることを確認してください。 – Peter

+0

これはdefです。 sql liteに含まれています – cs0815

答えて

3

sqliteのと間違って行くと、さまざまな問題のためのさまざまなソリューションがある可能性が物事のカップルがありますが、私はあなたが持つ問題は、sqliteのだと思います

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

をテストapp.configを内の構成要素に:何を持っていることは、.NET 4 System.Dataありながら.dllは.NET System.Dataに対して構築された、追加してみてください。

あなたはx64のマシン上にあり、およびx86のsqliteを参照している場合も、あなたは、x86へのあなたのテストアセンブリ用のターゲットフレームワークを変更(右クリックプロジェクト、プロパティを選択し、タブを構築し、用のx86を選択する必要がありますターゲットフレームワーク)

+0

ありがとうございます。ここにアクセスして取得してください:ServiceLocatorが初期化されていません。 SharpArch.NHibernate.ISessionFactoryKeyProviderを取得しようとしていた ----> System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。 \t SharpArch.Domain.SafeServiceLocator'1.GetService() \t SharpArch.NHibernate.SessionFactoryKeyHelper。あなたはDefaultSessionKeyProviderは、ウィンザーに登録されていることを確認する必要があります – cs0815

+0

SharpArch.NHibernate.NHibernateRepositoryWithTypedId'2.get_SessionでGetKeyFrom(anObjectオブジェクト) \t()など、あなたのComponentRegistrarでこれを持っていることを確認してください。 'コンテナ.Register( Component.For(typeof演算(ISessionFactoryKeyProvider)) .ImplementedBy(typeof演算(DefaultSessionFactoryKeyProvider)) .Named( "sessionFactoryKeyProvider")); ' – ChrisR

+0

またはあなたの前の質問のいずれかからの回答を見て: [リンク] (http://stackoverflow.com/questions/5119444/sharp-architecture-problem/5119696#5119696) – ChrisR

0

LITE問題はNHibernateのセッションファクトリcannoということです作成する必要があります。エラーメッセージ:

System.ArgumentException : Unable to find the requested .Net Framework Data Provider. It may not be installed. 

プロジェクトには、SQLLite DLLが含まれていますか?

System.Data.SQLite.dll

+0

ありがとうございました。 DLLが含まれています。 – cs0815

+0

NHibernate.Driver.SQLite20Driverが.net 2.0用で、4.0などで作業していますか? – cs0815

+0

Odd - Unit Testing ProjectのBinフォルダにあるすべてのファイルを一覧表示できますか(もちろん、独自のカスタムdllは除きます)。 – BonyT