spring junit

 轉載自 http://blog.csdn.net/funi16/article/details/8691575html

 

在寫單元測試的時候,通常是對數據庫進行增刪改查的操做,這個時候,若是以前刪除了某條記錄,天然後面的程序就找不到這條記錄了,因此能夠經過配置spring的事務管理或者測試框架來回滾,減小工做量。使用的數據庫是postgreSQL和mysql。java

在寫這篇文章的時候,不少地方借鑑了下面兩篇文章:mysql

http://www.cnblogs.com/rainisic/archive/2012/01/22/Spring_Test_Framework.htmlspring

http://blog.163.com/wf_shunqiziran/blog/static/17630720920121084325322/sql

一、建立測試類

  建立一個測試用的類,推薦名稱爲 「被測試類名稱 + Test」。數據庫

  測試類應該繼承與 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTestsapp

  對於 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 類的選擇:框架

  若是再你的測試類中,須要用到事務管理(好比要在測試結果出來以後回滾測試內容),就可使用AbstractTransactionalJUnit4SpringTests類。事務管理的使用方法和正常使用Spring事務管理是同樣的。再此須要注意的是,若是想要使用聲明式事務管理,即便用AbstractTransactionalJUnitSpringContextTests類,請在applicationContext.xml文件中加入transactionManager bean:post

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

  若是沒有添加上述bean,將會拋出NoSuchBeanDefinitionException,指明 No bean named 'transactionManager' is definded.單元測試

2. 配置測試類

  添加以下內容在class前,用於配置applicationContext.xml文件的位置。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")

3. 建立測試方法

  建立測試用方法,推薦名稱爲 「被測方法名稱+ Test」。

  測試方法上方加入 @Test

四、 經過JUnit 4 執行

  右鍵方法名,選擇則「Run As」→「JUnit Test」便可

 

我之前也是經過這種方法來配置單元測試的自動回滾的,不過在新的項目裏發現不行,因而又是各類度娘谷哥,終於找到了。順便說下我搜索到的不能自動回滾的集中緣由:

一、代碼中含有try-catch塊致使不能回滾。(我的以爲不靠譜)

二、方法裏面有非public方法。

三、加載了2次配置文件,致使insert和rollback方法不在一個事物裏面。我遇到的就是這種狀況。

如:我在註解當中已經加載了一次applicationContext.xml文件,而在setUp()裏面又加載了一次,致使方法被當成2個事物提交了。因而我使用註解來加載bean。

[java]  view plain  copy
 
  1. @Autowired  
  2.     private AppointmentDao appointmentDao;  

單元測試用例上面的註解是:

[java]  view plain  copy
 
  1. @RunWith(SpringJUnit4ClassRunner.class)  
  2. @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)  
  3. @Transactional  
  4. /**讀取配置文件到運行環境。注意:file的路徑 */  
  5. @ContextConfiguration(locations={"classpath:applicationContext.xml"})  

 在applicationContext.xml文件當中:

[java]  view plain  copy
 
  1. <bean id="txManager"  
  2.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  3.         <property name="dataSource" ref="dataSource" />  
  4.     </bean>  
相關文章
相關標籤/搜索