2015-04-16 3 views

ответ

4

Пример приложения Cineasts для SDN4 имеет тесты здесь: https://github.com/neo4j-examples/sdn4-cineasts/tree/master/src/test/java/org/neo4j/cineasts

Надежда, что помогает.

+0

Да, я попытался переписать мои тесты по пути SDN-cineasts. Но он работал только для простых случаев. например У меня есть init (spring) beans, которые проверяют db на «предварительную настройку» (например, пользователь admin доступен, если нет, чем создать один и т. Д.), И этот func не работает с подходом к расширению тестового класса от WrappingServerIntegrationTest из-за того, что у меня есть нет «соединения» с базой данных, когда эта функция. бежит. –

+0

Я не совсем понимаю, о чем вы спрашиваете: вы хотите, чтобы вы обращались к GraphDatabaseService? Если это так, theres getDatabase() вы можете использовать – Luanne

+0

У меня есть проблемы с инициализацией данных. По этой причине у меня есть весенний боб, который реализует CommandLineRunner и заполняет базу данных (например, администратором по умолчанию, когда он не существует, но с репозиториями данных с пружинами). Но эта функция. создает огромные проблемы. Например. когда я запускаю приложение как «обычное» веб-приложение, сеанс neo4j определяется с помощью «@Scope (value =« session », proxyMode = ScopedProxyMode.TARGET_CLASS)». Таким образом, сеанс недоступен. Я получаю сообщение об ошибке «Сессия« сеанс »неактивна для текущего потока». В интеграционных тестах я работал с помощью функции func. в методах @Before ... –

2

Ваши интеграционные тесты могут использовать насмешливую структуру, такую ​​как Spring MockMvc Spring, чтобы избежать необходимости запуска веб-контейнера. Если вы не хотите, чтобы они запускались в веб-контексте вообще, вы можете использовать другой файл конфигурации для тестирования, который не определяет компонент, связанный с сеансом.

Интеграционные тесты в кодовой базе SDN 4 используют оба этих подхода.

https://github.com/spring-projects/spring-data-neo4j/tree/4.0/spring-data-neo4j/src/test/java/org/springframework/data/neo4j/integration

+0

Проблема заключается не в тесте интеграции, а в использовании сеанса neo4j в контексте «веб-сеанса» (в «обычном» режиме веб-сервера). В этом случае сеанс недоступен для пакетных задач или задач запуска (правильно?). Это нормально, чтобы определить сеанс neo4j без весеннего пробела «сеанс» ???? –

+0

Я не пробовал это, но вы должны иметь возможность создать несколько экземпляров компонента Neo4jSession, если вам нужна эта функция. Сохраните обычный компонент сеанса для веб-приложения и создайте дополнительный компонент Neo4jSession для приложений для вашего запуска. Очевидно, что имена компонентов должны быть разными, но затем вы можете ввести экземпляр области приложения в свой CommandLineRunner. (Я предполагаю, что вы полагаетесь на поведение Spring Boot, чтобы вызывать для вас компоненты CommandLineRunner). Имейте в виду, что два компонента Neo4jSession не смогут использовать контексты отображения. – Vince

+0

Другим подходом было бы отказаться от идеи CommandLineRunner, а вместо этого создать компонент, реализующий BeanPostProcessor. В методе 'postProcessAfterInitialization' дождитесь, когда Spring создаст экземпляр компонента Neo4jSession, а затем сразу вызовет ваш код запуска, который будет передан в bean-компоненте. – Vince

Смежные вопросы