Тестирование единицы измерения Entity framework 6.1.3 DB-first


Вопрос

У меня возникают проблемы при использовании Framework Effort (версия 1.1.4) для модульного тестирования моего DB-уровня.

У меня есть DB-слой с использованием Entity framework 6.1.3, и модель создается с использованием подхода, основанного на базе данных, так что есть файл *.edmx описывающий модель.

Я создал частичный класс, чтобы разоблачить дополнительный конструктор, используемый модульными тестами, с такими усилиями:

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

Простой единичный тест выглядит следующим образом:

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

Когда я запускаю модульный тест, он генерирует исключение для строки:

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

{«Поставщик не вернул экземпляр ProviderManifest.»} InnerException Message: {«Невозможно определить версию хранилища, требуется допустимое подключение к хранилищу или подсказка версии».}

Другие сообщения, которые я нашел, предлагают изменить атрибут ProviderManifestToken в файле *.edmx с «2012» на «2008». Это, похоже, решает проблему, но вместо этого дает мое другое исключение при попытке использовать контекст в первый раз здесь:

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

NotSupportedException Невозможно определить имя поставщика для фабрики поставщика типа «System.Data.EntityClient.EntityProviderFactory». Убедитесь, что поставщик ADO.NET установлен или зарегистрирован в конфигурации приложения.

Кто-нибудь знает, как решить эту проблему, поэтому я могу использовать Effort с сущностью framework 6.1.3. БД-первый подход?

Я успешно использовал Effort (версия 1.1.4) для модульного тестирования DB-слоев, созданных в EF 4 и EF 5 с использованием DB-первого подхода - вот почему я считаю, что EF-версия может представлять интерес ...

Принятый ответ

Мой коллега нашел решение моей проблемы!

По-видимому, я использовал пакет «Effort» nuget вместо пакета «Effort.EF6» nuget. После удаления и установки другого я также должен был обновить свой App.Config с помощью тегов:

  <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>

И я также включил вызов SetUp для моих модульных тестов для регистрации поставщика усилий:

  <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>

Это решило проблему для моего. Надеюсь, он может оказать некоторую помощь другим!





Лицензировано согласно: CC-BY-SA
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему