MVC如果要測試Controller,勢必涉及到資料庫訪問,如果每次都訪問同一個資料庫必然造成與這個特定的資料庫產生了耦合,因此用記憶體資料庫SQLite來測試是最好不過的,同時也利於持續整合,每次測試都產生一個新的資料庫,測試完成後廢棄掉,以下是配置方式使用FluentNhibernate,需要注意的是構建Sechma的Session需要和資料訪問的Session一致才行
public class NHConfigurator
{
public ISessionFactory _sessionFactory;
public static Configuration _configuration;
public ISession Session { get; set; }
public NHConfigurator()
{
_sessionFactory = CreateSessionFactory();
Session = _sessionFactory.OpenSession();
BuildSchema(Session);
}
private static void BuildSchema(ISession Session)
{
SchemaExport export = new SchemaExport(_configuration);
export.Execute(true, true, false, Session.Connection, null);
}
public ISessionFactory CreateSessionFactory()
{
if(_sessionFactory==null)
{
_sessionFactory = Fluently.Configure()
.Database(
SQLiteConfiguration.Standard.InMemory().ShowSql())//產生語句
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<your_mapping_class>())
.ExposeConfiguration(cfg =>_configuration=cfg
)
.BuildSessionFactory();
}
return _sessionFactory;
}
}