2015-04-29 8 views
7

Sto provando a scrivere test unitari per la mia applicazione basata su Spring Boot che utilizza entità Hibernate/JPA & DAO. Ecco i passi che ho seguito finora:Test unitario per avvio a molla DAOD Hibernate basato su JPA

1) stato aggiunto il seguente 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) In ../test/resources/application.properties, ho aggiunto questo:

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) In ../test/resources/import.sql ho aggiunto un paio di 'inserire in ...', script di creazione dei dati.

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

4) La prova di unità si presenta così:

@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))); 
    } 
} 

Quando ho eseguito questo test, vengono visualizzati messaggi di errore del tipo:

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) Gruppo Entità:

@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; 

Cosa mi manca?

+0

Pubblica la mappatura dell'entità di gruppo e la parte pertinente della configurazione dell'applicazione. –

+0

Ho provato a rinominare import.sql in data.sql e creare schema.sql che crea la tabella dei gruppi, ma ho ancora ricevuto questo errore. – DilTeam

+0

Non esattamente quello che ho cambiato, ma ora funziona. L'unica cosa che ho fatto è stata aggiungere TUTTI gli SQL necessari a import.sql. Potrebbe essere questa la ragione. – DilTeam

risposta

1

DilTeam, ho trovato che il tuo ultimo commento era molto importante!

primavera non consente di utilizzare schema.sql (senza piattaforma siffix) con DDL-auto = creare-drop valore propertie.

Questa parte è descritto qui 74.3 Initialize a database using Spring JDBC:

Se si desidera utilizzare l'inizializzazione schema.sql in un'applicazione JPA (con Hibernate) allora DDL-auto = creare-drop porterà ad errori se Hibernate tenta di creare le stesse tabelle. Per evitare tali errori, impostare ddl-auto esplicitamente su "" (preferibile) o "nessuno". Se usi o meno ddl-auto = create-drop puoi sempre usare data.sql per inizializzare i nuovi dati .

Problemi correlati