Aufwandseinheitstests Entity-Framework 6.1.3 DB-first


Frage

Ich habe Probleme bei der Verwendung des Effort-Frameworks (Version 1.1.4), um meine DB-Ebene zu testen.

Ich habe einen DB-Layer mit Entity-Framework 6.1.3 und das Modell wird mit dem Ansatz der ersten Datenbank erstellt, so dass es eine *.edmx Datei gibt, die das Modell beschreibt.

Ich habe eine partielle Klasse erstellt, um einen zusätzlichen Konstruktor, der von den Komponententests verwendet wird, mit folgendem Aufwand verfügbar zu machen:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

Der einfache Unit-Test sieht so aus:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

Wenn ich den Komponententest ausfühle, löst er eine Ausnahme für die Zeile aus:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

{"Der Provider hat keine ProviderManifest-Instanz zurückgegeben."} InnerException-Nachricht: {"Speicherversion konnte nicht ermittelt werden; eine gültige Speicherverbindung oder ein Versionshinweis ist erforderlich."}

Andere Posts, die ich gefunden habe, *.edmx vor, das ProviderManifestToken Attribut in der *.edmx Datei von "2012" in "2008" zu ändern. Dies scheint das Problem zu lösen, gibt mir aber eine weitere Ausnahme, wenn ich versuche, den Kontext zum ersten Mal hier zu verwenden:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

NotSupportedException Der Providername für die Provider-Factory vom Typ 'System.Data.EntityClient.EntityProviderFactory' konnte nicht ermittelt werden. Stellen Sie sicher, dass der ADO.NET-Anbieter in der Anwendungskonfiguration installiert oder registriert ist.

Wer weiß, wie man dieses Problem löst, damit ich Effort mit Entity Framework 6.1.3 DB-First-Ansatz verwenden kann?

Ich konnte Effort (Version 1.1.4) erfolgreich einsetzen, um DB-Layer, die in EF 4 und EF 5 erstellt wurden, mit dem DB-First-Ansatz zu testen - aus diesem Grund denke ich, dass die EF-Version von Interesse sein könnte ...

Akzeptierte Antwort

Ein Kollege von mir fand die Lösung für mein Problem!

Anscheinend habe ich das "effort" nugget-Paket anstelle des "effort.EF6" nugget-Pakets verwendet. Nach der Deinstallation und Installation der anderen musste ich auch meine App.Config mit den Tags aktualisieren:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

Und ich habe auch einen Aufruf in das SetUp für meine Unit-Tests aufgenommen, um den Aufwandsanbieter zu registrieren:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

Dies löste das Problem für meine. Hoffentlich kann es anderen helfen!





Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum