Bom dia Pessoal. Não sou muito de postar aqui até porque arquitetura não é o meu forte então se falar bobagem por favor me perdoem.
Estou criando um projeto de testes (testes de integração) para testar os mapeamentos, objetos de domínio e repositórios com o NHibernate.
Para facilitar, criei uma class base onde é feita a configuração do NHibernate:
[TestClass] public abstract class NHibernateDomainBaseTest
{
protected ISession Session { get; private set; }
protected static ISessionFactory SessionFactory {get; private set; }
private static Configuration _configuration;
[TestInitialize] public void SetUp()
{
_configuration = Fluently.Configure()
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<UsuarioMap>().Conventions.AddFromAssemblyOf<EnumConvention>();
})
.ExposeConfiguration( c => new SchemaExport(c).Execute(false, true, false) )
.BuildConfiguration();
SessionFactory = _configuration.BuildSessionFactory();
Session = SessionFactory.OpenSession();
}
[TestCleanup] public void Cleanup()
{
Session.Close(); Session.Dispose();
}
}
Desta forma minhas classes de testes herdam da class base, exemplo: `ProcessoTest : NHibernateDomainBaseTest` Reparem que para cada TestMethod a base de dados é recriada e isto tem um impacto na performance e em outros fatores.
Lendo
este artigo resolvi implantar testes por transação. Basicamente cada TestMethod excuta em uma transaction que nunca é comitada.
Gostaria de saber a opinião de vocês.
Como vocês trabalham testes de integração com base de dados? Como vocês fazem no NHibernate?