2017-09-28 16 views
0

(Microsoft.AspNet.Identityが含まれる)エンティティフレームワークを使用するプロジェクトの単体テストを作成しようとしています。私はこのように私のdbContextの代用を作成します。EntTime FrameworkとNUnitテストでOneTimeSetupが失敗しました。

 var applicationDbContext = Substitute.For<ApplicationDbContext>(); 

     var deviceTypeActionRulesMockSet = Substitute.For<DbSet<DeviceTypeActionRules>, IQueryable<DeviceTypeActionRules>>(); 
     var deviceTypeActionRulesData = new List<DeviceTypeActionRules> 
     { 
       new DeviceTypeActionRules() { ActionId = "CheckIn", DeviceTypeId = 1, Frequency = 60 }, 
       new DeviceTypeActionRules() { ActionId = "Turn On", DeviceTypeId = 2, Frequency = 20 }, 
       new DeviceTypeActionRules() { ActionId = "Turn Off", DeviceTypeId = 2, Frequency = 30 } 
     }.AsQueryable(); 

     ((IQueryable<DeviceTypeActionRules>)deviceTypeActionRulesMockSet).Provider.Returns(deviceTypeActionRulesData.Provider); 
     ((IQueryable<DeviceTypeActionRules>)deviceTypeActionRulesMockSet).Expression.Returns(deviceTypeActionRulesData.Expression); 
     ((IQueryable<DeviceTypeActionRules>)deviceTypeActionRulesMockSet).ElementType.Returns(deviceTypeActionRulesData.ElementType); 
     ((IQueryable<DeviceTypeActionRules>)deviceTypeActionRulesMockSet).GetEnumerator().Returns(deviceTypeActionRulesData.GetEnumerator()); 

     applicationDbContext.DeviceTypeActionRules.Returns(deviceTypeActionRulesMockSet); 

私は上記のコードの最後の行を打ったときにエラーが発生し、私は次のエラーを取得:

結果メッセージ: OneTimeSetUp:System.Dataを.Entity.ModelConfiguration.ModelValidationException:モデル生成中に1つ以上の検証エラーが検出されました。

Castle.Proxies.IdentityUserRole :: EntityType 'IdentityUserRole'にキーが定義されていません。このEntityTypeのキーを定義します。 Castle.Proxies.IdentityUserLogin :: EntityType 'IdentityUserLogin'にはキーが定義されていません。このEntityTypeのキーを定義します。 IdentityUserRoles:EntityType:EntitySet 'IdentityUserRoles'は、キーが定義されていない 'IdentityUserRole'タイプに基づいています。 IdentityUserLogins:EntityType:EntitySet 'IdentityUserLogins'は、キーが定義されていない 'IdentityUserLogin'タイプに基づいています。

public virtual DbSet<DeviceTypeActionRules> DeviceTypeActionRules { get; set; } 

、それは上記のような問題を解決するように見えた:

+0

"DbContext"を手動で嘲笑する代わりに、 "InMemory"プロバイダを使用して、SQLデータのIQuerybleエクスペリエンスを向上させます。 [InMemoryによるテスト](https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/in-memory) – Fabio

答えて

0

は私ApplicationDbContext内部では、私は仮想するプロパティを変更しました。

関連する問題