Mocks ritorno deride: Neo4j Mocking (database) oggetti per il test unità di logica di dominio

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

  •  26-10-2019
  •  | 
  •  

Domanda

Sono logica di dominio unit testing e il dominio oggetti supportati da un database Neo4j. La maggior parte di questi test hanno bisogno di prendere in giro il GraphDatabaseService Neo4j, vari Nodes, e vari Relationships. Alcuni dei metodi deriso restituire questi oggetti deriso. Ad esempio, un getReferenceNode () chiamata restituisce un nodo deriso o di un getSingleRelationship () chiamata restituisce un rapporto deriso cui getEndNode () dei rendimenti sua volta un nodo deriso.

Sono preoccupato per il numero di mock ritorno mock ritorno schernisce. Di solito, questo non è raccomandato. Si complica certamente la configurazione di prova e porta a test molto fragili, perché tanti strati di funzionalità Neo4j hanno bisogno di essere presi in giro.

C'è un modo per evitare questa logica di dominio quando il test delle unità Neo4j-backed?

È stato utile?

Soluzione

Si potrebbe provare a utilizzare un database temporaneo - quella che viene creato / lavata ogni volta. In caso di necessità di dati di esempio, allora si potrebbe:

  1. o hanno un appuntamento fisso che popola il nuovo db con i dati;
  2. hanno una configurazione di prova db che viene utilizzato ogni volta che si esegue le prove (in questo caso è necessario trovare un modo per far ritirare le modifiche o iniziare sempre dallo stato conosciuto)

Altri suggerimenti

Sto usando Maven, fonte di dati primavera e unit test la mia app utilizzando l'ImpermanentGraphDatabase. Dal momento che è stato abbastanza difficile per configurarlo qui è quello che ho fatto:

nel mio applicationContext.xml ho inizializzato il 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>

nel mio pom.xml ho dovuto aggiungere i kernel-test:

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-kernel</artifactId>
        <version>1.6</version>
        <classifier>tests</classifier>
        <scope>test</scope>
    </dependency>

altrimenti l'impermanentGraphDatabase non sarà disponibile.

alla fine ho potuto usare un ambiente pulito grafico 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 () {
          ...
    }
}

Trovo che l'installazione è molto più veloce rispetto all'utilizzo modo normale. mantenendo tutto in memoria sembra pagare

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top