2015-10-15 4 views
0

Я пытаюсь установить какой-либо модульный тест для своего приложения, я бы хотел протестировать с наборами данных Unitils, но до сих пор у меня много проблем. Я убежден, что у меня неправильная настройка, и никто не сможет ее рассмотреть.Невозможно выполнить единичный тест - Unitils, Hibernate

У меня есть 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 
+0

[здесь] (http://jonathan.lalou.free.fr/?tag=table-not-found-in-tablemaporg-dbunit-dataset-orderedtablenamemap_tablenames) Я нашел " Действительно, даже когда вы предоставляете набор данных t через плоский XML-файл DBUnit не создает таблицы, а заполняет их только ". Приятно, но я хочу использовать в схеме памяти и настройке create в файле hibernate.cfg.xml будет выполняться только потом. – Zveratko

ответ

1

так в конце концов я сделал это работа тест теперь выглядит как что

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 = пружинный - отложенная загрузка DATAS ГЭ после того, как схема создается в соответствии с

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

DatabaseModule.Transactional.value.default = отключено это как-то отключить транзакционной тупик, что, вероятно, вызвано тем, что я использую

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

DatabaseModule.Transactional.value.default = отключен

 Смежные вопросы

  • Нет связанных вопросов^_^