Estamos utilizando un patrón de generador para generar datos de prueba. Estos objetos de dominio tienen relaciones entre ellos. Nuestras pruebas funcionales requieren que estos objetos persistan.Datos complejos de prueba persistentes
Piense en este modelo:
domain model http://i34.tinypic.com/21mg1gn.png
Si quiero un ejemplo sencillo de CI hacer aNew().c().build()
Si yo quiero que sea persistió hago aNew().c().saveIn(session)
Si quiero una instancia de C con un BI conocido do aNew().c().with(b).build()
Bueno, tienes t la idea. Mi problema es, si quiero persistir una C, ¿debería persistir que es B? ¿O debería persistir antes de la mano? ¿Qué pasa si quiero un B por defecto razonable? ¿Qué pasa si quiero persistir una D? ¿Debería persistir todo A, B, C?
Por supuesto, el sistema real es mucho más complejo (a veces con referencias circulares). Estoy buscando una mejor práctica para persistir datos complejos de prueba.
Editar: Parece que he tropezado con la barrera del idioma, mi lengua materna no es el inglés, así que lo siento por la oscuridad. Aquí hay más información:
- No es el código heredado que estoy tratando de probar
- Estoy tratando de escribir una prueba de cobertura, no una prueba de unidad (como resultado no voy a burlarse de nada)
- El software que estoy tratando de probar funciona si la base de datos está poblada hasta cierto punto (no usa todas las entidades).
PS. No dude en solicitar más información, porque he estado luchando por encontrar la mejor práctica posible. Lo más parecido que se me ocurre es:
- Mantenga un registro de lo que se ha establecido explícitamente al crear una entidad.
- Suponga que las entidades explícitamente establecidas ya están persistentes, no las persista.
- Persista todo lo demás (con su propia persistencia).
Esto funcionará, pero mi sensación de araña es un hormigueo, creo que estoy haciendo algo mal, porque habrá una lógica involucrada en el código de prueba, será muy complejo tratar sin pruebas.
Editar 2: Intentaré ser más claro. Cuando estoy escribiendo/ejecutando mi unidad y algunas pruebas de integración no tengo ningún problema, porque los datos de la prueba no se conservan, sino que permanecen en la memoria.
Pero cuando intento persistir en mis datos de prueba, hibernar no me permite guardar una entidad sin sus relaciones.
¿Cómo puedo solucionar este problema?
Imagine que estos datos ya existen en la base de datos. Y otro proceso (que estoy probando) es leer estos datos. Pero a veces, una B es relevante y quiero que sea visible en la prueba al crear y persistir Bs; pero a veces no son relevantes y estoy tratando de esconderlos detrás de los constructores. – nimcap
Eso no tiene sentido para mí. Si los datos ya están en la base de datos, ¿por qué (y quién) necesita persistir? ¿Y a qué te refieres con "quiero que [B] sea visible en la prueba"? – sleske