Como faço para testar o NHibernate FetchMode.Eager corretamente?
-
06-07-2019 - |
Pergunta
Existe alguma maneira de escrever um teste de integração para testar se a FetchMode.Eager funciona corretamente? Eu quero verificar se ele não está indo para o banco de dados quando eu recuperar MySubObject.
O código:
public MyObject GetEager(string name)
{
return Session
.CreateCriteria(typeof(MyObject))
.SetFetchMode("MySubObject", FetchMode.Eager)
.Add(Restrictions.Eq("Name", name))
.UniqueResult<MyObject>();
}
Solução
Você também pode usar NHibernateUtil.IsInitialized
... como explicado neste post
http://nhibernate.info/doc/howto /various/lazy-loading-eager-loading.html
Outras dicas
Como sobre algo como isso;
MyObject testObject = new MyObject();
testObject.GetEager("a name");
testObject.Session.Close();
Assert.AreEqual(testObject.MySubObject.Id, 3425);
Ao fechar a sessão e, em seguida, tentar acessar o objeto associado se o objeto não é ansiosamente carregada ele irá lançar uma exceção. Conversly se for eagrly carregado NHibernate não tentará acessar o banco de dados e, portanto, não irá lançar a exceção.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow