Simulacros simulacros de retorno: burlarse de los objetos neo4j (base de datos) para pruebas unitarias de lógica de dominio
-
26-10-2019 - |
Pregunta
Soy una unidad de prueba de dominio y objetos de dominio respaldados por una base de datos NEO4J. La mayoría de estas pruebas necesitan burlarse del neo4j GraphDatabaseService
, varios Nodes
, Y varios Relationships
. Algunos de los métodos burlados devuelven estos objetos burlados. Por ejemplo, una llamada getReferencenode () devuelve un nodo burlado o una llamada getSingerLationship () devuelve una relación burlada cuyo getendNode () a su vez devuelve un nodo burlado.
Me preocupa la cantidad de simulacros que devuelven simulacros que devuelven simulacros. Por lo general, esto no se recomienda. Ciertamente complica la configuración de la prueba y conduce a pruebas bastante frágiles, porque muchas capas de funcionalidad Neo4J deben burlarse.
¿Hay alguna manera de evitar esto cuando la unidad de dominio de la unidad de prueba de NEO4J?
Solución
Puede intentar usar una base de datos temporal, una que se crea/enjuague cada vez. En caso de que necesite probar datos, entonces podría:
- Cualquiera de los dos tiene un accesorio que puega el nuevo DB con datos;
- Tenga una configuración de DB de prueba que se usa cada vez que ejecuta pruebas (en este caso debe encontrar una forma de revertir sus cambios o comenzar siempre desde el estado conocido)
Otros consejos
Estoy usando Maven, Spring Data Source y Pinte Unit My App utilizando el ImperManentGraphdatabase. Dado que fue bastante difícil configurarlo aquí es lo que hice:
En mi ApplicationContext.xml inicialicé el GraphDatabaseService:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-lazy-init="true">
<neo4j:config graphDatabaseService="graphDatabaseService"/>
<!-- use in memory graph database -->
<bean id="graphDatabaseService" class="org.neo4j.test.ImpermanentGraphDatabase"/>
</beans>
En mi pom.xml tuve que agregar las pruebas de núcleo:
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-kernel</artifactId>
<version>1.6</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
De lo contrario, el impermanentgraphdatabase no estará disponible.
Finalmente podría usar un gráfico limpio db evrytime:
public class MyNeo4JTest extends TestCase {
protected ApplicationContext ctx;
protected GraphDatabaseService gds;
@Before
public void setUp() throws Exception {
// test-data
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
gds = ctx.getBean(GraphDatabaseService.class);
}
@Test
public void testUser () {
...
}
}
Encuentro que la configuración es mucho más rápida que usar la forma normal. Mantener todo en la memoria parece dar sus frutos