Tengo un sistema que después de recibir un mensaje - lo encola (escribe en una tabla), y otro proceso sondea el DB y lo descoloca para procesarlo. En mis pruebas automáticas he fusionado las operaciones en el mismo proceso, pero no puedo (conceptualmente) fusionar las sesiones de NH de las dos operaciones.Error aleatorio al probar con NHibernate en un SQLite en memoria db
Naturalmente - surgen problemas.
He leído todo lo que pude sobre cómo hacer que la combinación SQLite-InMemory-NHibernate funcione en el mundo de las pruebas, pero ahora me he encontrado con pruebas RANDOMLY fallidas, debido a errores "sin dicha tabla". Para dejar en claro: "aleatorio" significa que la misma prueba con la misma configuración exacta y el código a veces fallarán.
tengo la siguiente configuración SQLite:
return SQLiteConfiguration
.Standard
.ConnectionString(x => x.Is("Data Source=:memory:; Version=3; New=True; Pooling=True; Max Pool Size=1;"))
.Raw(NHibernate.Cfg.Environment.ReleaseConnections, "on_close");
Al principio de mi prueba (cada prueba) voy a buscar el proveedor de sesión "estática", y ruego a tirar de la base de datos existente limpia, y volver a crear el esquema:
public void PurgeDatabaseOrCreateNew()
{
using (var session = GetNewSession())
using (var tx = session.BeginTransaction())
{
PurgeDatabaseOrCreateNew(session);
tx.Commit();
}
}
private void PurgeDatabaseOrCreateNew(ISession session)
{
//http://ayende.com/Blog/archive/2009/04/28/nhibernate-unit-testing.aspx
new SchemaExport(_Configuration)
.Execute(false, true, false, session.Connection, null);
}
así que sí, que está en una sesión diferente, pero la conexión se agruparon en SQLite, por lo que la próxima sesión se crea verá el esquema generado. Sin embargo, aunque la mayoría de las veces funciona, a veces la operación posterior de "enqueue" fallará porque no puede ver una tabla para mis mensajes entrantes. Además, parece que se produce al máximo una o dos veces por ejecución de conjunto de pruebas; no todas las pruebas fallan, solo la primera (y a veces otra. No estoy seguro de si es la segunda o no).
La peor parte es la aleatoriedad, naturalmente. Me he dicho a mí mismo que lo he solucionado varias veces ahora, simplemente porque simplemente "dejó de fallar". Al azar.
Esto ocurre en FW4.0, System.Data.SQLite versión x86, Win7 64b y 2008R2 (tres máquinas diferentes en total), NH2.1.2, configurado con FNH, en TestDriven.NET 32b precesos y NUnit console 32b procesos .
¿Ayuda?
Tengo este problema también. Casi todas las pruebas pasan, pero de vez en cuando fallan una o dos pruebas con errores de "no hay tabla", y si las vuelvo a ejecutar, pasan. Creo que es solo que SQLite está recreando la conexión en el grupo de conexiones, al azar. –