• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 持續集成之路——數據訪問層單元測試遇到的問題(2)

    發表于:2013-07-22來源:Csdn作者:mydeman點擊數: 標簽:持續集成
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) Caused by: org.hsqldb.HsqlException: integrity constraint violation: foreign key no ac

      at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

      at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)

      ……

      ……

      Caused by: org.hsqldb.HsqlException: integrity constraint violation: foreign key no action; FK_L6IDVK78B2TLU8NO6EDJ0G6U8 table: CUSTOM_TABLE_COLUMN_SPACE_TYPE

      at org.hsqldb.error.Error.error(Unknown Source)

      at org.hsqldb.StatementDML.performReferentialActions(Unknown Source)

      at org.hsqldb.StatementDML.delete(Unknown Source)

      at org.hsqldb.StatementDML.executeDeleteStatement(Unknown Source)

      at org.hsqldb.StatementDML.getResult(Unknown Source)

      at org.hsqldb.StatementDMQL.execute(Unknown Source)

      at org.hsqldb.Session.executeCompiledStatement(Unknown Source)

      at org.hsqldb.Session.executeDirectStatement(Unknown Source)

      at org.hsqldb.Session.execute(Unknown Source)

      at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)

      ……

      看異常信息,應該是刪除記錄時,外鍵級聯導致的問題。在實體類里改變級聯設置并不起作用。最后在StackOverflow上找了一個解決方法:編寫一個類,繼承AbstractTestExecutionListener,在beforeTestClass中取消級聯依賴。具體如下:

      [java] view plaincopyprint?

      import org.dbunit.database.DatabaseDataSourceConnection;

      import org.dbunit.database.IDatabaseConnection;

      import org.springframework.test.context.TestContext;

      import org.springframework.test.context.support.AbstractTestExecutionListener;

      import javax.sql.DataSource;

      public class ForeignKeyDisabling extends AbstractTestExecutionListener {

      @Override

      public void beforeTestClass(TestContext testContext) throws Exception {

      IDatabaseConnection dbConn = new DatabaseDataSourceConnection(

      testContext.getApplicationContext().getBean(DataSource.class)

      );

      dbConn.getConnection().prepareStatement("SET DATABASE REFERENTIAL INTEGRITY FALSE").execute();

      }

      }

      import org.dbunit.database.DatabaseDataSourceConnection;

      import org.dbunit.database.IDatabaseConnection;

      import org.springframework.test.context.TestContext;

      import org.springframework.test.context.support.AbstractTestExecutionListener;

      import javax.sql.DataSource;

      public class ForeignKeyDisabling extends AbstractTestExecutionListener {

      @Override

      public void beforeTestClass(TestContext testContext) throws Exception {

      IDatabaseConnection dbConn = new DatabaseDataSourceConnection(

      testContext.getApplicationContext().getBean(DataSource.class)

      );

      dbConn.getConnection().prepareStatement("SET DATABASE REFERENTIAL INTEGRITY FALSE").execute();

      }

      }

      把這個新的Listener添加測試類的注解中:

      [java] view plaincopyprint?

      @RunWith(SpringJUnit4ClassRunner.class)

      @ContextConfiguration("classpath:applicationContext-test.xml")

      @TestExecutionListeners({

      DependencyInjectionTestExecutionListener.class,

      DirtiesContextTestExecutionListener.class,

      TransactionDbUnitTestExecutionListener.class,

      ForeignKeyDisabling.class})

      @RunWith(SpringJUnit4ClassRunner.class)

      @ContextConfiguration("classpath:applicationContext-test.xml")

      @TestExecutionListeners({

      DependencyInjectionTestExecutionListener.class,

      DirtiesContextTestExecutionListener.class,

      TransactionDbUnitTestExecutionListener.class,

      ForeignKeyDisabling.class})

      參考:http://stackoverflow.com/questions/2685274/tdd-with-hsqldb-removing-foreign-keys

      三、PROPERTY_DATATYPE_FACTORY引起的警告

      在jenkins中構建時,總是可以看到如下的警告信息:

      WARN getDataTypeFactory, Potential problem found: The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database 'HSQL Database Engine' (e.g. some datatypes may not be supported properly). In rare cases you might see this message because the list of supported database products is incomplete (list=[derby]). If so please request a java-class update via the forums.If you are using your own IDataTypeFactory extending DefaultDataTypeFactory, ensure that you override getValidDbProducts() to specify the supported database products.

      意思很好理解,就說默認的DataTypeFactory可能會引起問題,建議設置該屬性值。解決方法也很明顯:就是設置數據庫連接的PROPERTY_DATATYPE_FACTORY屬性的值。嘗試了用Before、BeforeClass或者自定義ExecutionListener中都無法實現對該屬性的設置。

    原文轉自:http://blog.csdn.net/mydeman/article/details/9374621

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>