结合SpringJPA和EmbeddedDatabaseBuilder。在单元测试时,存储库返回空数据

时间:2016-11-20 15:35:45

标签: java spring spring-boot

我有以下CrudRepository和Dao服务。出于测试目的,我使用EmbeddedDatabaseBuilder(创建表并插入样本数据)。 在这种情况下,您可以从RDBMSDaoImpl->test方法看到,当我尝试通过SpringJPA访问PROPERTY表中的数据时,它返回空结果。 但是当我使用convertional方式(jdbctemplate)时,我得到通过insert-data.sql插入的值。

使用Spring boot 1.3.3.RELEASE。

public interface OfPropertyRepository extends CrudRepository <OfProperty, String> {

   OfProperty findByName(String name);
}

@Service
public class RDBMSDaoImpl implements RDBMSDao {

   private static final String SQL = "SELECT VALUE FROM TIMS.PROPERTY WHERE ID=?";

   @Autowired 
   OfPropertyRepository OfPropertyRepository;

   @Override
   public int test() {

**//Return a value**
     String value =  jdbcTemplate.queryForObject(SQL, String.class, "prop.key");   

**// no value found**
          OfPropertyRepository.findAll();
       }


   ////
   public class AppConfigTest {

   @Bean(destroyMethod = "shutdown")
   public DataSource getDataSource() throws Exception {
      return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)            
            .setName("TIMS")
            .addScript("classpath:/db/create-db.sql")
            .addScript("classpath:/db/insert-data.sql")
            .build();      
   }

   }

   @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppConfigTest.class})
@ActiveProfiles("Test")
public class BaseSendServMessageRequestTest  implements ApplicationContextAware{}

1 个答案:

答案 0 :(得分:0)