2015-04-29 7 views
7

के लिए यूनिट टेस्ट मैं अपने स्प्रिंग बूट आधारित एप्लिकेशन के लिए यूनिट परीक्षण लिखने की कोशिश कर रहा हूं जो हाइबरनेट/जेपीए इकाइयों & डीएओ का उपयोग करता है। ये कदम उठाएँ मैं अब तक का पालन किया है कर रहे हैं:स्प्रिंग बूट हाइबरनेट जेपीए आधारित डीएओ

1)

<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 pom.xml करने के लिए) ../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) इकाई परीक्षण इस तरह दिखता है:

:

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) समूह इकाई:

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

जब मैं इस टेस्ट चलाने के लिए, मैं इस तरह के रूप त्रुटि संदेश

@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

पोस्ट अपने समूह इकाई और अनुप्रयोग config के संबंधित भाग के मानचित्रण। –

+0

मैं import.sql का नाम बदलने की कोशिश की data.sql करने और schema.sql जो समूह तालिका बनाता है बनाने, लेकिन अभी भी यह त्रुटि मिलती। – DilTeam

+0

बिल्कुल सही नहीं है कि मैंने क्या बदल दिया, लेकिन यह अब काम कर रहा है। एकमात्र चीज मैंने किया था, मैंने आयात करने के लिए सभी आवश्यक SQLs को जोड़ा .ql। यही कारण हो सकता है। – DilTeam

उत्तर

1

दिलटेम, मैंने पाया कि आपकी आखिरी टिप्पणी बहुत महत्वपूर्ण थी!

स्प्रिंग DDL-ऑटो के साथ schema.sql (मंच siffix बिना) का उपयोग करने की अनुमति नहीं है = बनाने ड्रॉप propertie मूल्य।

इस भाग यहाँ 74.3 Initialize a database using Spring JDBC वर्णित है:

आप एक जेपीए अनुप्रयोग में schema.sql प्रारंभ ( हाइबरनेट साथ) का उपयोग करना चाहते हैं तो DDL-ऑटो = बनाने ड्रॉप त्रुटियों को बढ़ावा मिलेगा अगर हाइबरनेट एक ही टेबल बनाने की कोशिश करता है। उन त्रुटियों को स्पष्ट रूप से "" (बेहतर) या "कोई नहीं" के लिए सेट DDL-ऑटो से बचने के लिए। चाहे या नहीं आप DDL-ऑटो का उपयोग = बनाने-ड्रॉप आप हमेशा नए डेटा प्रारंभ करने में data.sql उपयोग कर सकते हैं।

संबंधित मुद्दे