2015-04-29 70 views
7

我正在尝试为基于Spring Boot的应用程序使用Hibernate/JPA实体& DAO编写单元测试。这是到目前为止,我遵循的步骤:Spring引导的单元测试基于Hibernate JPA的DAO

1)增加以下内容的pom.xml

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-test</artifactId> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.hsqldb</groupId> 
    <artifactId>hsqldb</artifactId> 
    <scope>runtime</scope> 
</dependency> 

2)在../test/resources/application.properties,我已经添加了这一点:

spring.jpa.hibernate.ddl-auto = create-drop 
spring.jpa.database = HSQL 
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect 
spring.datasource.driverClassName = org.hsqldb.jdbcDriver 
spring.datasource.url: jdbc:hsqldb:mem:scratchdb 
spring.datasource.username = sa 
spring.datasource.password = 

3)在../test/resources/import.sql我已经添加了几个 '插入...',数据创建脚本。

insert into groups(GROUP_NAME, THREAD_POOL_SIZE) values ("TEST GROUP 1", 5); 

4)单元测试看起来是这样的:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 

public class TestGroupDao { 

    @Autowired 
    GroupDao groupDao; 

    @Test 
    public void testFindByName() { 

     Group group = groupDao.findByName("TEST GROUP 1"); 
     //assertThat(group.getPoolSize(), is(equalTo(5))); 
    } 
} 

当我运行这个测试,我得到错误信息,如:

org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: Unsuccessful: alter table.. 
org.hibernate.tool.hbm2ddl.SchemaExport : HHH000389: user lacks privilege or object not found: PUBLIC.GROUP 

5)组实体:

@Entity 
@javax.persistence.Table(name = "groups", uniqueConstraints = { 
     @UniqueConstraint(columnNames = "GROUP_NAME"), 
}) 
public class Group { 

    // ============== 
    // PRIVATE FIELDS 
    // ============== 

    // An autogenerated id (unique for each group in the db) 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "GROUP_ID", unique = true, nullable = false) 
    private long id; 

    @Column(name = "GROUP_NAME", unique = true, nullable = false) 
    private String name; 

我错过了什么?

+0

发布您的组实体和应用程序配置的相关部分的映射。 –

+0

我尝试将import.sql重命名为data.sql并创建了创建组表的sql.sql,但仍然出现此错误。 – DilTeam

+0

不完全确定我改变了什么,但现在正在工作。我做的唯一的事情就是将所有必需的SQL添加到import.sql中。可能是这个原因。 – DilTeam

回答

1

DilTeam,我发现你最后的评论非常重要!

春不允许使用schema.sql文件(不含平台siffix)与DDL-AUTO =创造降 propertie值。

这部分在这里74.3 Initialize a database using Spring JDBC描述:

如果你想使用的应用程序JPA的schema.sql文件初始化(与 休眠)然后DDL-AUTO =创造降会导致错误,如果休眠 尝试创建相同的表。为了避免这些错误将ddl-auto 明确设置为“”(优选)或“无”。无论您是否使用 ddl-auto = create-drop,您始终可以使用data.sql来初始化新的 数据。