Подтвердить что ты не робот

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

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

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

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

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

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

    private Entities CreateContext()
    {
        //var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        //var connection = Effort.EntityConnectionFactory.CreateTransient(connectionString);
        //return new Entities(connection as DbConnection);

        var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");
        var context = new Entities(connection);
        return context;
    }

    [TestMethod]
    public void Testing_Effort_Integration()
    {
        using (var context = CreateContext())
        {
            var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
            Assert.IsNotNull(entity);
        }
    }

Когда я запускаю unit test, он выдает исключение для строки:

var connection  = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");

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

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

var entity = context.TableEntity.FirstOrDefault(i=> i.Id);

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

Кто-нибудь знает, как решить эту проблему, поэтому я могу использовать Effort с инфраструктурой сущностей 6.1.3. Подход DB-first?

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

4b9b3361

Ответ 1

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

По-видимому, я использовал пакет "Усилия" 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 для моих модульных тестов для регистрации поставщика усилий:

    [SetUp]
    public void Setup()
    {
        EffortProviderConfiguration.RegisterProvider();
    }

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