Simulacros simulacros de retorno: burlarse de los objetos neo4j (base de datos) para pruebas unitarias de lógica de dominio

StackOverflow https://stackoverflow.com/questions/8321414

  •  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?

¿Fue útil?

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:

  1. Cualquiera de los dos tiene un accesorio que puega el nuevo DB con datos;
  2. 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top