Unidade testando uma classe de serviço de inicialização Primavera com (sai) repositório no JUnit

votos
5

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(){
  ... 
   }
}
Publicado 29/10/2013 em 10:31
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Em sua Primavera teste irá usar a configuração única de classe ContextConfiguration interior. Esta classe descreve o seu contexto. Neste contexto você criou única feijão serviço e nenhum repositório. Assim, a única feijão que será criado é SessionService. Você deve adicionar descrição SessionRepository em ContextConfiguration interior. Sua classe JpaConfig não será usado na classe de teste (você não especificar isso), apenas na aplicação.

Respondeu 29/10/2013 em 11:24
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more