我试图为我的应用程序设置一些单元测试,我想用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>属性如下所示
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发布于 2015-11-04 09:40:41
所以我终于成功了--现在的测试看起来是这样的
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.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=disabled
https://stackoverflow.com/questions/33142776
复制相似问题