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

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

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

    發表于:2013-07-22來源:Csdn作者:mydeman點擊數: 標簽:持續集成
    那就只能先找到拋出這個異常的位置,然后向前推,逐步找到獲取連接的地方。最后發現,連接是在DbUnitTestExecutionListener.prepareDatabaseConnection中獲取連接,

      那就只能先找到拋出這個異常的位置,然后向前推,逐步找到獲取連接的地方。最后發現,連接是在DbUnitTestExecutionListener.prepareDatabaseConnection中獲取連接,并且沒有做什么進一步的處理,所以前面的設置都不起作用??磥碛种荒芡ㄟ^重寫源代碼來達成目的了。

      直接上源碼吧:

      CustomTransactionDbUnitTestExecutionListener類: 完全復制DbUnitTestExecutionListener,只是增加一句代碼。注意該類的包路徑和DbUnitTestExecutionListener一致。

      [java] view plaincopyprint?

      private void prepareDatabaseConnection(TestContext testContext, String databaseConnectionBeanName) throws Exception {

      Object databaseConnection = testContext.getApplicationContext().getBean(databaseConnectionBeanName);

      if (databaseConnection instanceof DataSource) {

      databaseConnection = DatabaseDataSourceConnectionFactoryBean.newConnection((DataSource) databaseConnection);

      }

      Assert.isInstanceOf(IDatabaseConnection.class, databaseConnection);

      ((IDatabaseConnection)databaseConnection).getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());

       testContext.setAttribute(CONNECTION_ATTRIBUTE, databaseConnection);

      }

      private void prepareDatabaseConnection(TestContext testContext, String databaseConnectionBeanName) throws Exception {

      Object databaseConnection = testContext.getApplicationContext().getBean(databaseConnectionBeanName);

      if (databaseConnection instanceof DataSource) {

      databaseConnection = DatabaseDataSourceConnectionFactoryBean.newConnection((DataSource) databaseConnection);

      }

      Assert.isInstanceOf(IDatabaseConnection.class, databaseConnection);

      ((IDatabaseConnection)databaseConnection).getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());

      testContext.setAttribute(CONNECTION_ATTRIBUTE, databaseConnection);

      }

      綠色就是真正發揮作用的代碼。

      可是這個類并不能直接飲用,而是通過TransactionDbUnitTestExecutionListener的CHAIN被調用的,而TransactionDbUnitTestExecutionListener同樣無法更改,同樣只能建一個自定義的TransactionDbUnitTestExecutionListener類,CustomTransactionDbUnitTestExecutionListener:

      [java] view plaincopyprint?

      public class CustomTransactionDbUnitTestExecutionListener extends TestExecutionListenerChain {

      private static final Class[] CHAIN = { TransactionalTestExecutionListener.class,

      CustomDbUnitTestExecutionListener.class };

      @Override

      protected Class[] getChain() {

      return CHAIN;

      }

      }

      public class CustomTransactionDbUnitTestExecutionListener extends TestExecutionListenerChain {

      private static final Class[] CHAIN = { TransactionalTestExecutionListener.class,

      CustomDbUnitTestExecutionListener.class };

      @Override

      protected Class[] getChain() {

      return CHAIN;

      }

      }

      那么測試類的注解也要修改:

      [java] view plaincopyprint?

      @RunWith(SpringJUnit4ClassRunner.class)

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

      @TestExecutionListeners({

      DependencyInjectionTestExecutionListener.class,

      DirtiesContextTestExecutionListener.class,

      CustomTransactionDbUnitTestExecutionListener.class,

      ForeignKeyDisabling.class})

      @RunWith(SpringJUnit4ClassRunner.class)

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

      @TestExecutionListeners({

      DependencyInjectionTestExecutionListener.class,

      DirtiesContextTestExecutionListener.class,

      CustomTransactionDbUnitTestExecutionListener.class,

      ForeignKeyDisabling.class})

      四、@Transactional標簽引起的問題

      按照spring-dbunit-test的文檔中說法,可以使用@Transactional確保數據的清潔。使用簡單,只需要將上面的注解增加一個@Transactional,

      [java] view plaincopyprint?

      @RunWith(SpringJUnit4ClassRunner.class)

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

      @Transactional

      @TestExecutionListeners({

      DependencyInjectionTestExecutionListener.class,

      DirtiesContextTestExecutionListener.class,

      CustomTransactionDbUnitTestExecutionListener.class,

      ForeignKeyDisabling.class})

      @RunWith(SpringJUnit4ClassRunner.class)

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

      @Transactional

      @TestExecutionListeners({

      DependencyInjectionTestExecutionListener.class,

    原文轉自: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>