2017-09-25 54 views
0

我想爲我的項目創建一個集成測試,我是Spring Test DB Unit的新手。不幸的是在運行測試,我遇到了如下錯誤:春季測試DBUnit H2Connection拒絕

Error: Connection refused: Connect localhost

我還添加了基本測試配置類文件,其中的配置,以及如何連接到數據庫H2。

//import classes 

    @Configuration 
    @ComponentScan({"com.projects.person", "com.projects.commons"}) 
    @EnableWebMvc 
    @EnableTransactionManagement 
    @PropertySource("classpath:application.properties") 
    public class BaseTestConfig extends WebMvcConfigurerAdapter 
    { 

     @Autowired 
     private Environment env; 

     @Autowired 
     private OperatingSystem operatingSystem; 

     @Autowired 
     private PropertiesFactory propertiesFactory; 

     @Bean 
     public UrlBasedViewResolver setupViewResolver() 
     { 
      UrlBasedViewResolver resolver = new UrlBasedViewResolver(); 
      resolver.setPrefix("/WEB-INF/pages/"); 
      resolver.setSuffix(".jsp"); 
      resolver.setViewClass(JstlView.class); 
      return resolver; 
     } 

     @Bean 
     public LocalSessionFactoryBean sessionFactory() { 
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
      sessionFactory.setDataSource(dataSource()); 
      sessionFactory.setPackagesToScan("com.projects.person.model.db"); 
      sessionFactory.setHibernateProperties(hibernateProperties()); 
      return sessionFactory; 
     } 

     @Bean 
     public DataSource dataSource() { 

      String databaseUrl = "jdbc:h2:tcp://localhost/persondb"; 
      if(operatingSystem.isWindows()) 
      { 
       databaseUrl = "jdbc:h2:tcp://localhost/~/persondb"; 
      } 

      DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
      dataSource.setDriverClassName("org.h2.Driver"); 
      dataSource.setUrl(databaseUrl); 
      dataSource.setUsername("sa"); 
      dataSource.setPassword(""); 
      return dataSource; 
     } 

     @Bean 
     public H2Connection dbUnitConnection() throws SQLException, DatabaseUnitException { 
      return new H2Connection(dataSource().getConnection(), "Person"); 
     } 

     private Properties hibernateProperties() { 
      Properties properties = new Properties(); 
      properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); 
      properties.put("hibernate.show_sql", "false"); 
      return properties; 
     } 

     @Bean 
     public HibernateTransactionManager transactionManager(SessionFactory s) { 
      HibernateTransactionManager transactionManager = propertiesFactory.createTransactionManagerProperty(); 
      transactionManager.setSessionFactory(sessionFactory().getObject()); 
      return transactionManager; 
     } 
    } 

回答

0

連接被拒絕,因爲您指定的databaseUrl要求已運行和在localhost監聽TCP端口上的服務器。

所以你有兩個選擇。

  1. 確保您有這樣一個運行在localhost上的H2數據庫。
  2. 改爲使用嵌入式H2數據庫,如下例所示。
@Bean 
public DataSource dataSource() { 
    return new EmbeddedDatabaseBuilder() 
     .generateUniqueName(true) 
     .setType(H2) 
     .build(); 
}