мои контроллеры в моем приложении ASP.NET MVC зависят от IDataContext, который является оберткой вокруг сеанса NHibnerate, так что я могу легко заменить это позже.Я использую контейнер Microsoft Unity IOC для внедрения моих зависимостей в конструкторы моих классов.
Сначала я попытался создать FakeDataContext в моем тестовом проекте и настроить правильные зависимости следующим образом:
public class BaseControllerTest {
[TestInitialize]
public void Init() {
// Create the ioc container
var container = new UnityContainer();
// Setup the common service locator (must come before any instance registered that use the common service locator such as membership provider)
ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(container));
// Configure the container
container.RegisterType<IDataContext, FakeDataContext>();
}
}
Теперь все, что мне нужно сделать, это наследовать от этого класса, и все работает отлично, но я чувствую, что FakeDataContext - не самый точный способ выполнения моих тестов, поэтому я пытаюсь создать сеанс в памяти с использованием SQLite.Я изменил вышеупомянутое к:
public class BaseControllerTest {
private static Configuration _configuration;
[TestInitialize]
public void Init() {
// Create the ioc container
var container = new UnityContainer();
// Configure the container
container.RegisterType<ISessionFactory>(new ContainerControlledLifetimeManager(), new InjectionFactory(c => {
return CreateSessionFactory();
}));
container.RegisterType<ISession>(new InjectionFactory(c => {
var sessionFactory = container.Resolve<ISessionFactory>();
var session = sessionFactory.OpenSession();
BuildSchema(session);
return session;
}));
container.RegisterType<IDataContext, NHibernateDataContext>();
}
private static ISessionFactory CreateSessionFactory() {
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory())
.Mappings(m => m.FluentMappings
.AddFromAssembly(Assembly.GetExecutingAssembly())
.Conventions.AddFromAssemblyOf<EnumConvention>())
.ExposeConfiguration(c => _configuration = c)
.BuildSessionFactory();
}
private static void BuildSchema(ISession session) {
var export = new SchemaExport(_configuration);
export.Execute(true, true, false, session.Connection, null);
}
}
Однако это выдает ошибку «Недопустимая или неполная конфигурация использовалась при создании SessionFactory.».Я подумал, что это может быть потому, что сущности, которые ищут сопоставления, находятся в другом проекте, чем проект Test, поэтому я попытался сказать Assembly.LoadFile ("C: .. \ MyAssembly.dll"), но это все равно не сработало.*
Обратите внимание, что я использовал следующую статью http://www.mohundro.com/blog/CommentView,guid,fa72ff57-5c08-49fa-979e-c732df2bf5f8.aspx, чтобы помочь, но это не совсем то, что я ищу.
Буду признателен, если кто-то сможет помочь.Спасибо