Макеты возвращают макет: издевательство NEO4J (база данных) объекты для модульного тестирования логики домена

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

  •  26-10-2019
  •  | 
  •  

Вопрос

Я являюсь единичным тестированием доменной логики и объектами домена, поддерживаемыми базой данных NEO4J. Большинство из этих тестов должны издеваться над NEO4J GraphDatabaseService, различный Nodes, и различные Relationships. Анкет Некоторые из высмеиваемых методов возвращают эти высмеиваемые объекты. Например, вызов getReferenceNode () возвращает высмеивающий узел или вызов getinglerelationship () возвращает высмеиваемые отношения, чья getendNode () в свою очередь возвращает издевательного узла.

Меня обеспокоен количеством макетов, возвращающих макет, возвращающиеся макет. Обычно это не рекомендуется. Это, безусловно, усложняет настройку теста и приводит к довольно хрупким тестам, потому что так много слоев функциональности NEO4J нужно высмеивать.

Есть ли способ избежать этого, когда модульная тестирование логики домена, поддерживаемой NEO4J?

Это было полезно?

Решение

Вы можете попробовать использовать временную базу данных-ту, которая создается/промывается каждый раз. Если вам нужно попробовать данные, вы можете:

  1. либо есть приспособление, которое заполняет новый БД данных;
  2. Иметь тестовую настройку DB, которая используется каждый раз, когда вы запускаете тесты (в этом случае вы должны определить способ обратить свои изменения или всегда начинать с известного состояния)

Другие советы

Я использую Maven, Spring Data Data Source и Unit Test, используя ImpermanentGraphDatabase. Поскольку это было довольно сложно настроить здесь, это то, что я сделал:

В моем ApplicationContext.xml я инициализировал 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>

В моем pom.xml я должен был добавить критерий ядра:

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

В противном случае не подлежащая использованию графдатабазы.

Наконец я мог бы использовать чистый график 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 () {
          ...
    }
}

Я считаю, что настройка намного быстрее, чем использование нормального пути. Сохранение всего в памяти, кажется, окупается

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top