0

J'essaie de tester un de mes projets qui utilise l'identité ASP (EF core) dans VS2017.ASP Core Identity - Test d'unité In Memory Error

La question que j'ai est quand je crée mon contexte DB utilisant des noyaux EF en mémoire, il explose avec l'erreur suivante -

Message: System.IO.FileLoadException: Impossible de charger le fichier ou l'assemblage 'Microsoft.Extensions.DependencyInjection.Abstractions, Version = 1.1.0.0, Culture = neutre, PublicKeyToken = adb9793829ddae60' ou l'une de ses dépendances. La définition de manifeste de l'assembly localisé ne correspond pas à la référence d'assembly. (Exception de HRESULT: 0x80131040)

J'utilise les paquets NuGet suivants

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore - 1.1.2
  • Microsoft.EntityFrameworkCore.InMemory - 1.1.2

Les repos sont des packages xunit par défaut que vous obtenez lors de la création du projet.

Toute aide serait grandement appréciée, passer de nombreuses heures à essayer de comprendre ce qui se passe mal:/

Voici le code de test unitaire:

public class TestDbContext : IdentityDbContext<User> 
{ 
    public TestDbContext(DbContextOptions<TestDbContext> options) : base(options) 
    { 
    } 
} 

public class User : IdentityUser 
{ 
} 

[Fact] 
public void Test1() 
{ 
    var builder = new DbContextOptionsBuilder<TestDbContext>(); 

    builder.UseInMemoryDatabase(); 

    var context = new TestDbContext(builder.Options); 
} 
+0

comment essayez-vous de créer le contexte EF et moqué dbsets? utilisez-vous un cadre moqueur comme Moq? et avez-vous un exemple de code? –

+0

désolé, vient de voir un exemple de projet, je vais jeter un coup d'oeil et de voir si quelque chose apparaît à moi –

+0

L'exemple fonctionne très bien pour moi. Je ne pense pas que j'ai fait quelque chose de spécial non plus.C'est ce que j'ai fait, téléchargé, vérifié qu'il n'y avait rien de malveillant: P, a couru Nuget restaurer, ligne de commande ouverte et tapé dans dotnet restaurer, a couru le test unitaire, a obtenu un contect retour –

Répondre

1

Mise à niveau vers la dernière version de Microsoft.NET.Test.Sdk résout le problème.

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />

1

Sur la base de mes observations et quelques recherches, je pense ceci est lié au coureur de test XUnit. Voici ma logique de travail.

Tous les assemblys dans le référentiel ops avec une dépendance à Microsoft.Extensions.DependencyInjection.Abstractions référence version 1.1.1 (ceci est validé en parcourant manuellement les dépendances sous les références et en vérifiant toutes les DLL de sortie après construction).

Exécution du test à l'aide du testeur ReSharpers, tout fonctionne correctement. enter image description here

Exécution du test en utilisant le paquet NuGet géré xunit.runner.visualstudio lancers francs à l'exception des opérations ... Quelque chose essaie de charger Microsoft.Extensions.DependencyInjection.Abstractions la version 1.1.0, mais seulement lorsqu'il est exécuté en utilisant la xunit.runner.visualstudio enter image description here

Faire un peu de recherche Cela semble être un problème avec le coureur d'essai auparavant, mais la solution communément acceptée d'installer le paquet NuGet Microsoft.DotNet.InternalAbstractions et ou Microsoft.NET.Test.Sdk ne semble pas fonctionner (séparément ou en conjonction les uns avec les autres)

La solution actuelle pour que cela fonctionne dans le test unitaire ... Downgrade EF de sorte que la dépendance la plus élevée à Microsoft.Extensions.DependencyInjection.Abstractions est à la version 1.1.0

Le test a fonctionné en utilisant le testeur natif une fois que j'ai dégradé toutes les bibliothèques EF à version 1.1.1 (Microsoft.AspNetCore.Identity.EntityFrameworkCore version 1.1.1 dépend de Microsoft.Extensions.DependencyInjection.Abstractions version 1.1.0) et supprimé toutes les DLL de sortie de la version 1.1.1 (je devais supprimer ces manuellement, un nettoyage ne semble pas les enlever) enter image description here

Je sais que le op ne veut probablement pas rétrograder, mais nous espérons que cela donne un aperçu des raisons pour lesquelles l'exception est levée et aide à déterminer la meilleure marche à suivre.

EDIT: J'ai essayé d'ajouter des redirections de liaison au fichier .csproj comme ci-dessous, mais cela ne fonctionne toujours pas.

<PropertyGroup> 
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> 
    </PropertyGroup> 
+0

Merci Joe, cela fonctionne pour moi, je suis sûr (j'espère) V2 va le réparer, donc je ne dois pas être sur une ancienne version pour longtemps: P –

+1

Je vais mettre à jour la réponse aussi, mais juste pour voir comme vous pouvez utiliser EF version 1.1.1 comme la dépendance sur 'Microsoft.Extensions.DependencyInjection.Abstractions' est toujours 1.1.0. De cette façon, vous n'êtes qu'une version mineure derrière. –