Модульное тестирование усилий Entity Framework 6.1.3 DB-first

У меня возникают проблемы при использовании Effort Framework (версия 1.1.4) для модульного тестирования моего уровня 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);
        }
    }

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

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

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

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

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

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

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

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

1 ответ

Решение

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

Видимо, я использовал пакет nuget "Effort" вместо пакета "Effort.EF6". После удаления и установки другого мне также пришлось обновить мой 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();
    }

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

Другие вопросы по тегам