2016-10-26 12 views
0

誰かがこれを試してきたと確信しています。 Visual Studio 2015、LocalDB(2014)、EntityFramework 6.1.3、NUnit 3.5、ReSharper 2016.2を使ってテストプロジェクトをセットアップしました。基本的には、NUnitを使用してLocalDBデータベースに接続されたEntityFrameworkプロジェクトに対して統合テストを実行しようとしています。 ReSharperを自分のマシンにインストールしていて、ReSharperのユニットテストツールを使ってNUnitユニットテストを実行しています(NUnit 3コンソールを使って同じ結果が得られます)。 EFはコードファーストで設定され、アプリケーションのコンテキストは「DropCreateDatabaseAlways」に設定されているため、各テスト中に.mdfファイルを削除して再作成する必要があります。NUnitテスト中にVS 2015でLocalDBを作成できない

私は私のユニットテストを実行するたびに、私は同じ神秘的なエラーを取得:「System.OverflowException:算術演算の結果がオーバフロー。」私は私が設定しているため、これは.NETとNUnitの間の紛争である知っていますEXACTと同じ設定(ユニットテストなし)のコンソールアプリケーションで、完全に機能します!コンソールアプリケーションは.mdfファイルを作成することができ、それに接続してVSのLocalDBデータベースコネクタを使ってテーブルを見ることができます。

設定:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="HyperQueryEF" connectionString="Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\HyperQueryEF.mdf;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="mssqllocaldb" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 

モデル:

using System; 

namespace HyperQueryEF.Model 
{ 
    public class Dealership 
    { 
     public int ID { get; set; } 
     public DateTime DateCreated { get; set; } 
     public string Name { get; set; } 
    } 
} 

DbContext:

using System.Data.Entity; 

namespace HyperQueryEF.Model 
{ 
    public class HyperQueryEFContext : DbContext 
    { 
     public HyperQueryEFContext() : base("HyperQueryEF") 
     { 
     } 

     public void Initialize() 
     { 
      Database.SetInitializer(new DropCreateDatabaseAlways<HyperQueryEFContext>()); 
      //Force database to initialize (Create/Migrate tables). 
      Database.Initialize(true); 
     } 

     public virtual DbSet<Dealership> Dealerships { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      //modelBuilder.Configurations.AddFromAssembly(this.GetType().Assembly); 
      modelBuilder.Entity<Dealership>().ToTable("Dealership"); 
      modelBuilder.Entity<Dealership>() 
       .HasKey(x => x.ID) 
       .Property(x => x.ID); 
      modelBuilder.Entity<Dealership>() 
       .Property(x => x.Name); 

      base.OnModelCreating(modelBuilder); 
     } 
    } 
} 

テスト:

using System; 
using System.IO; 
using System.Reflection; 
using HyperQueryEF.Model; 
using NUnit.Framework; 

namespace HyperQueryEF.Tests.IntegrationTests.TransactionManagerTests 
{ 
    [TestFixture] 
    public class When_the_app_initializes 
    { 
     private DirectoryInfo _appDataDirectory; 
     private HyperQueryEFContext _context; 

     [SetUp] 
     public void SetUp() 
     { 
      _appDataDirectory = new DirectoryInfo(Assembly.GetExecutingAssembly().Location).Parent; 
      AppDomain.CurrentDomain.SetData("DataDirectory", Directory.GetCurrentDirectory()); 
     } 

     [Test] 
     public void The_database_exists_as_configured() 
     { 
      _context = new HyperQueryEFContext(); 
      _context.Initialize(); 
     } 
    } 
} 

(注意事項DataDirectory | AppDomian設定Webアプリケーションとの整合性にする)

仕様: OS:Windowsの10プロ .NET:4.5.2

スタックトレース:

at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.Open() at System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action 2 operation, TInterceptionContext interceptionContext, Action 3 executing, Action 3 executed) at System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext) at System.Data.Entity.SqlServer.SqlProviderServices.<>c__DisplayClass33.<UsingConnection>b__32() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func 1 operation) at System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action 1 act) at System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable 1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) at System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable 1 commandTimeout, StoreItemCollection storeItemCollection) at System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection) at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) at System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func 3 createMigrator, ObjectContext objectContext)
at System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) at System.Data.Entity.DropCreateDatabaseAlways`1.InitializeDatabase(TContext context) at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() at HyperQueryEF.Model.HyperQueryEFContext.Initialize() in C:\Users\agilliam\Dropbox\HyperQueryEF\Projects\HyperQueryEF.Model\HyperQueryEFContext.cs:line 15 at HyperQueryEF.Tests.IntegrationTests.TransactionManagerTests.When_the_app_initializes.The_database_exists_as_configured() in C:\Users\agilliam\Dropbox\HyperQueryEF\Projects\HyperQueryEF.Tests\IntegrationTests\TransactionManagerTests.cs:line 26

答えて

0

更新:それEntity FrameworkがNUnitをサポートするように構築されているようには思えません。私はMSTestプラットフォームを使って全く同じテストをビルドして実行しました。私はMSTestにNUnitを好むが、MSTestは仕事をうまくやっているようだ。

関連する問題