J'essaye de créer le test unitaire pour un projet, qui utilise le cadre d'entité avec (Microsoft.AspNet.Identity inclus). Je crée le substituer à mes dbContext comme ceci:OneTimeSetup a échoué Nsubstitute pour Entity Framework et Test NUnit
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);
L'erreur se produit lorsque je tape la dernière ligne dans le code ci-dessus, je reçois l'erreur suivante:
Résultat Message: OneTimeSetUp: System.Data .Entity.ModelConfiguration.ModelValidationException: Une ou plusieurs erreurs de validation ont été détectées lors de la génération du modèle:
Castle.Proxies.IdentityUserRole :: EntityType 'IdentityUserRole' n'a pas de clé définie. Définissez la clé pour cet EntityType. Castle.Proxies.IdentityUserLogin:: EntityType 'IdentityUserLogin' n'a pas de clé définie. Définissez la clé pour cet EntityType. IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' est basé sur le type 'IdentityUserRole' qui n'a aucune clé définie. IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' est basé sur le type 'IdentityUserLogin' qui n'a aucune clé définie.
Non lié, mais au lieu de se moquer manuellement 'DbContext', utilisez le fournisseur" InMemory ", qui fournira plus d'expérience IQueryble pour les données SQL. [Test avec InMemory] (https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/in-memory). – Fabio