Eu estou trabalhando em um webservice com base bota primavera com seguinte estrutura:
Controlador (REST) -> Serviços -> Repositórios (como sugerido em alguns tutoriais).
My Database Connection (JPA / Hibernate / MySQL) é definida em uma classe @Configuration. (ver abaixo)
Agora eu gostaria de escrever testes simples para os métodos em minhas aulas de Serviços, mas eu realmente não entendo como carregar ApplicationContext em minhas classes de teste e como para zombar da APP / Repositórios.
Este é o quão longe eu vim:
Minha classe de serviço
@Component
public class SessionService {
@Autowired
private SessionRepository sessionRepository;
public void MethodIWantToTest(int i){
};
[...]
}
Minha classe de teste:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class SessionServiceTest {
@Configuration
static class ContextConfiguration {
@Bean
public SessionService sessionService() {
return new SessionService();
}
}
@Autowired
SessionService sessionService;
@Test
public void testMethod(){
[...]
}
}
Mas eu fico seguinte exceção:
Causada por: org.springframework.beans.factory.BeanCreationException: Erro ao criar feijão com o nome 'sessionService': Injeção de dependências autowired falhou; exceção aninhada é org.springframework.beans.factory.BeanCreationException: Não foi possível autowire campo: private com.myApp.SessionRepository com.myApp.SessionService.sessionRepository; exceção aninhada é org.springframework.beans.factory.NoSuchBeanDefinitionException: Não feijão qualificação do tipo [com.myApp.SessionRepository] encontrada para dependência: esperar pelo menos 1 feijão que se qualifica como autowire candidato para esta dependência. anotações de dependência: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}
Para completar: aqui está o meu @Configuration para jpa:
@Configuration
@EnableJpaRepositories(basePackages={com.myApp.repositories})
@EnableTransactionManagement
public class JpaConfig {
@Bean
public ComboPooledDataSource dataSource() throws PropertyVetoException, IOException {
...
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
...
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
...
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
...
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
...
}
}













