Модульное тестирование усилий 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();
}
Это решило проблему для меня. Надеюсь, это может помочь другим!