簡體   English   中英

無法進行單元測試-Unitils,休眠

[英]Unable to unit test - Unitils, Hibernate

我正在嘗試為我的應用程序設置一些單元測試,我想使用Unitils數據集進行測試,但是到目前為止,我遇到了很多問題。 我確信我的設置有誤,任何人都可以檢查它的問題。

我有hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration
   PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
   "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

   <session-factory>
       <!-- database connection settings -->
       <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
       <property name="hibernate.connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property>

       <property name="hibernate.connection.url">jdbc:hsqldb:mem:testdb</property>
       <!--<property name="hibernate.hbm2ddl.auto">create</property>-->



       <!-- Enable Hibernate's second level cache -->
       <property name="hibernate.cache.use_second_level_cache">false</property>
       <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>

       <!-- helper debug settings -->
       <property name="hibernate.show_sql">true</property>
       <property name="hibernate.format_sql">true</property>

       <mapping class="cz.test.Request"/>  
   </session-factory>

</hibernate-configuration>

Unitils屬性如下

database.dialect=hsqldb
database.driverClassName=org.hsqldb.jdbc.JDBCDriver

database.url=jdbc:hsqldb:mem:testdb
database.schemaNames=PUBLIC

最后我的測試是

@DataSet("DaoTest.xml")
@HibernateSessionFactory({"test_hibernate.cfg.xml"})
public class DaoTest extends UnitilsJUnit4 {

    private SessionFactory sessionFactory;

    private Session session = null;

    @Test
    public void testMappingToDatabase() {
        HibernateUnitils.assertMappingWithDatabaseConsistent();
    }
}

我越來越

SEVERE: Table 'TrnRequest' not found in tableMap=org.dbunit.dataset.OrderedTableNameMap[_tableNames=[], _tableMap={}, _caseSensitiveTableNames=false]
Caused by: org.dbunit.dataset.NoSuchTableException: Request

我猜想沒有創建架構,在hibernate.cfg.xml中設置某些內容無濟於事,因為創建是在此錯誤之后完成的,並且無論如何還是失敗

X 15, 2015 9:44:19 DOP. org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: exporting generated schema to database
X 15, 2015 9:44:19 DOP. org.hibernate.tool.hbm2ddl.SchemaExport create
SEVERE: Unsuccessful: create table Request (id bigint generated by default as identity (start with 1), amount bigint, amountCbk bigint, applicationId varchar(4), batch integer, cardIssuer varchar(20), cardSeq integer, currency varchar(3), emvData varchar(1024), entryMode varchar(3), exp varchar(4), maskedPan varchar(32), originalTime timestamp, ORIGINALTIME_UTC timestamp, pan varchar(64), panKey varchar(64), posData varchar(512), repeated NUMBER(1,0) DEFAULT 0  NOT NULL, reqFlag varchar(255), reqProcessing varchar(255), reqType varchar(255), requestTime timestamp, REQUESTTIME_UTC timestamp, sequenceNumber varchar(10), stan bigint, termid varchar(16), transactionTime timestamp, primary key (id))
X 15, 2015 9:44:19 DOP. org.hibernate.tool.hbm2ddl.SchemaExport create
SEVERE: type not found or user lacks privilege: NUMBER
X 15, 2015 9:44:19 DOP. org.hibernate.tool.hbm2ddl.SchemaExport create
SEVERE: Unsuccessful: alter table TrnReleatedTrn add constraint FK135128224355CCD7 foreign key (releatedRequest_id) references TrnRequest
X 15, 2015 9:44:19 DOP. org.hibernate.tool.hbm2ddl.SchemaExport create
SEVERE: user lacks privilege or object not found: REQUEST
X 15, 2015 9:44:19 DOP. org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: schema export complete

所以最后我讓它工作了現在測試看起來像這樣

public class SettlementDaoTest extends UnitilsJUnit4{

    @HibernateSessionFactory("test_hibernate.cfg.xml")
    SessionFactory hsfLocal;

    @Before
    public void before(){
        SessionFactoryProvider.setSessionFactory(hsfLocal);
    }

    @Test
    @DataSet
    public void testGetTransaction() throws Exception {


        SessionFactoryProvider.getSessionFactory().getCurrentSession().beginTransaction();

        List<Long> customerIds = Factory.getAtFileSettlementDao().getCustomerIds("TB01");
        Assert.assertNotNull(customerIds);
        Assert.assertEquals(4924L , (long)customerIds.get(0));
        SessionFactoryProvider.getSessionFactory().getCurrentSession().getTransaction().commit();


    }
}

我在unitils.properties中更改的設置unitils.module.dbunit.runAfter = spring-將數據集的加載推遲到根據

<property name="hibernate.hbm2ddl.auto">create-drop</property>

DatabaseModule.Transactional.value.default = disabled以某種方式禁用了事務性死鎖,這可能是由於我正在使用

<property name="hibernate.current_session_context_class">thread</property>

DatabaseModule.Transactional.value.default =禁用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM