Признаюсь, я новичок в том, как делать вещи на Java, и я совершенно потерялся, пытаясь запустить простой модульный тест.
Я создаю библиотеку доступа к данным и хочу протестировать ее. Я использую Spring Data Neo4j 4.0.0.BUILD-SNAPSHOT, потому что мне нужно подключиться к удаленному серверу Neo4j в реальном мире.
После борьбы с ошибками весь день я нахожусь в точке, где у меня есть тестовый класс:
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan(basePackages = {"org.mystuff.data"})
@ContextConfiguration(classes={Neo4jTestConfiguration.class})
public class PersonRepositoryTest {
@Autowired
PersonRepository personRepository;
protected GraphDatabaseService graphDb;
@Before
public void setUp() throws Exception {
graphDb = new TestGraphDatabaseFactory().newImpermanentDatabase();
}
@After
public void tearDown() {
graphDb.shutdown();
}
@Test
public void testCreatePerson() throws Exception {
assertNotNull(personRepository);
Person p = new Person("Test", "User");
personRepository.save(p);
}
}
Neo4jTestConfiguration.java
@Configuration
@EnableNeo4jRepositories(basePackages = "org.mystuff.data")
@EnableTransactionManagement
public class Neo4jTestConfiguration extends Neo4jConfiguration {
@Bean
public SessionFactory getSessionFactory() {
return new SessionFactory("org.mystuff.data");
}
@Bean
public Neo4jServer neo4jServer() {
// What to return here? I want in-memory database
return null;
}
@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return super.getSession();
}
}
При выполнении тестов человекRepository.save() выдает и исключение «Нет области, зарегистрированной для области «сеанс». Я не знаю, нужен ли мне класс конфигурации, но мой тестовый класс не будет работать без него, потому что Spring нуждается в @ContextConfiguration, и я хочу, чтобы все прелести DI, которые Spring предоставляет (среди прочего).
Как я могу заставить свои тесты работать с Spring?