Spring Test 整合 JUnit 4 使用總結

不淨之心發表於2013-03-18
[url]http://www.cnblogs.com/rainisic/archive/2012/01/22/Spring_Test_Framework.html[/url]

[color=red][b]AbstractJUnit4SpringContextTests[/b][/color]:
對整合了Spring TestContext Framework與JUnit 4.4環境中的ApplicationContext測試支援的基本測試類進行了抽取。當你繼承AbstractJUnit4SpringContextTests時,你就可以訪問到protected的成員變數:
applicationContext:使用它進行顯式的bean查詢或者測試整個上下文的狀態。


[color=red][b]AbstractTransactionalJUnit4SpringContextTests[/b][/color]:
對為JDBC訪問增加便捷功能的AbstractJUnit4SpringContextTests的事務擴充套件進行抽象。 需要在ApplicationContext中定義一個javax.sql.DataSource bean和一個PlatformTransactionManager bean。當你繼承AbstractTransactionalJUnit4SpringContextTests類時,你就可以訪問到下列protected的成員變數:
applicationContext:繼承自父類AbstractJUnit4SpringContextTests。 使用它執行bean的查詢或者測試整個上下文的狀態
simpleJdbcTemplate:當通過查詢來確認狀態時非常有用。例如,應用程式碼要建立一個物件, 然後使用ORM工具將其持久化,這時你想在測試程式碼執行前後對其進行查詢,以確定資料是否插入到資料庫中。 (Spring會保證該查詢執行在相同事務內。)你需要告訴你的ORM工具‘flush’其改變以正確完成任務,例如, 使用HibernateSession介面的flush()方法。

[color=red][b]@Rollback(value=false)[/b][/color]
如果測試類繼承了AbstractTransactionalJUnit4SpringContextTests,那麼在測試方法加上這個註解,可以控制方法對資料庫的提交和回滾,如果沒有寫上這個註解,則預設是回滾的.


[color=red][b]Spring Test 整合 JUnit 4 使用總結[/b][/color]
本文原創,歡迎轉載。轉載請在文章明顯可見處張貼如下內容:(注意:請保留超連結格式)

本文為Rainisic原創,歡迎轉載,轉載請在文章明顯可見處張貼原帖資訊:
[url]http://www.cnblogs.com/rainisic/archive/2012/01/22/Spring_Test_Framework.html[/url]

  這兩天做Web開發,發現通過Spring進行物件管理之後,做測試變得複雜了。因為所有的Bean都需要在applicationContext.xml中載入好,之後再通過@Resource去取得。如果每次都要整個業務流做的差不多了再去測試,這樣效率很低,也很麻煩。如果單獨去寫一個測試用類,這樣太繁瑣了。於是想起Spring有一個測試框架,能夠整合JUnit進行測試,於是便拿出來試試~

  廢話不多說,教程直接開始。

1. 加入依賴包
  使用Spring的測試框架需要加入以下依賴包:

JUnit 4 (官方下載:[url]https://github.com/KentBeck/junit/downloads[/url])
Spring Test (Spring框架中的test包)
Spring 相關其他依賴包(不再贅述了,就是context等包)
2. 建立測試源目錄和包
  在此,推薦建立一個和src平級的原始檔目錄,因為src內的類都是為日後產品準備的,而此處的類僅僅用於測試。而包的名稱可以和src中的目錄同名,這樣由於在test源目錄中,所以不會有衝突,而且名稱又一模一樣,更方便檢索。

3. 建立測試類
  建立一個測試用的類,推薦名稱為 “被測試類名稱 + Test”。

  測試類應該繼承與 [color=red][b]AbstractJUnit4SpringContextTests [/b][/color]或 [color=red][b]AbstractTransactionalJUnit4SpringContextTests[/b][/color]

  對於 [color=red][b]AbstractJUnit4springcontextTests [/b][/color]和 [color=red][b]AbstractTransactionalJUnit4SpringContextTests [/b][/color]類的選擇:
  如果再你的測試類中,需要用到事務管理(比如要在測試結果出來之後回滾測試內容),就可以使用AbstractTransactionalJUnit4SpringTests類。事務管理的使用方法和正常使用Spring事務管理是一樣的。再此需要注意的是,如果想要使用宣告式事務管理,即使用AbstractTransactionalJUnitSpringContextTests類,請在applicationContext.xml檔案中加入transactionManager bean:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

  如果沒有新增上述bean,將會丟擲NoSuchBeanDefinitionException,指明 No bean named 'transactionManager' is definded.

4. 配置測試類
  新增如下內容在class前,用於配置applicationContext.xml檔案的位置。

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

5. 建立測試方法
  建立測試用方法,推薦名稱為 “被測方法名稱+ Test”。

  測試方法上方加入 @Test

6. 通過JUnit 4 執行
  右鍵方法名,選擇則“Run As”→“JUnit Test”即可



附錄1:整體測試類檔案

/* @(#) UserDaoTest.java
*
* Date: 2012-1-16
*
* Author: Rainisic
*/
package com.mb.dao;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.mb.entity.User;

/**
* @author Rainisic
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserDaoTest extends AbstractJUnit4SpringContextTests {

@Resource
private UserDaoInterface userDao;

@Test
public void saveTest() {

User user1 = new User();
user1.setUsername("rainisic");
user1.setPassword("123456");
user1.setNickName("rainisic");
user1.setEmail("rainisic@gmail.com");

User user2 = new User();
user2.setUsername("admin");
user2.setPassword("123456");
user2.setNickName("admin");
user2.setEmail("admin@admin.com");

User user3 = new User();
user3.setUsername("test");
user3.setPassword("123456");
user3.setNickName("test");
user3.setEmail("test@gmail.com");

userDao.save(user1);
userDao.save(user2);
userDao.save(user3);
}
}


  OK,到此為止就可以使用Spring的測試框架了。

當存在多個xml檔案的時候:
@ContextConfiguration(locations={"classpath:/spring/*-resource.xml",  
"classpath:/spring/*-validator.xml",
"classpath:/spring/*-datasource.xml",
"classpath:/spring/*-dao.xml",
"classpath:/spring/*-service.xml"})

相關文章