Тестирование единицы измерения 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-версия может быть из интерес...
Ответы
Ответ 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();
}
Это решило проблему для моего. Надеюсь, он может оказать некоторую помощь другим!