前言
單元測試是一個程序員必備的技能,我在這里就不多說了,直接就寫相應的代碼吧。
單元測試基礎類
1 import org.junit.runner.RunWith; 2 import org.springframework.test.context.ContextConfiguration; 3 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; 4 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 5 6 //指定bean注入的配置文件 7 @ContextConfiguration(locations = { "classpath:/spring/spring_root.xml" ,"classpath:/spring/spring_mvc.xml"}) 8 //使用標准的JUnit @RunWith注釋來告訴JUnit使用Spring TestRunner 9 @RunWith(SpringJUnit4ClassRunner.class) 10 public class SpringTestCase extends AbstractJUnit4SpringContextTests { 11 12 }
在這里配置好要加載的配置文件,然后用你寫的普通單元測試類繼承這個類,然后在相應的方法上加上@Test注解就可以進行單元測試了。
功能復雜的單元測試
例如DAO層,整合好的結構如下

首先,在src/test/java中寫我們的測試類XXXXTest.java然后在類上面加上注解:
1 import java.util.Date; 2 import java.util.List; 3 4 import org.junit.Test; 5 import org.junit.runner.RunWith; 6 import org.slf4j.Logger; 7 import org.slf4j.LoggerFactory; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.test.context.ActiveProfiles; 10 import org.springframework.test.context.ContextConfiguration; 11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 12 import org.springframework.transaction.annotation.Transactional; 13 14 import com.macow.home.first.entity.User; 15 import com.macow.home.first.mapper.UserMapper; 16 17 @RunWith(SpringJUnit4ClassRunner.class) 18 @ContextConfiguration("/spring-context.xml") 19 @ActiveProfiles(value="dev") 20 @Transactional 21 public class UserMapperTest { 22 private Logger logger=LoggerFactory.getLogger(this.getClass()); 23 @Autowired 24 private UserMapper userMapper; 25 26 @Test 27 public void testUserInsert() { 28 User user=new User(); 29 user.setName("楊過"); 30 user.setPassword("222222"); 31 user.setCreateDate(new Date()); 32 userMapper.insert(user); 33 logger.info("--------->testUserInsert end-------------"); 34 } 35 36 @Test 37 public void testUserSelect() { 38 List<User> select = userMapper.select(null); 39 for(User user:select){ 40 logger.info("--------->"+user.getName()+"-------------"); 41 } 42 logger.info("--------->testUserInsert end-------------"); 43 } 44 }
@RunWith(SpringJUnit4ClassRunner.class)SpringJUnit支持,由此引入Spring-Test框架支持!
@ContextConfiguration(locations = "classpath:applicationContext.xml") 多個配置文件的話可以用數組表示{“applicationContext.xml”,“applicationContext1.xml”},下面我會貼我的配置文件,只有一個配置文件;
@ContextConfiguration("/spring-context.xml")放在根路徑下(即類路徑下),然后<import resource="spring-dao.xml" />所有的配置文件和資源文件
@Transactional這個非常關鍵,如果不加入這個注解配置,事務控制就會完全失效!
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)這里的事務關聯到配置文件中的事務控制器(transactionManager = "transactionManager"),同時指定自動回滾(defaultRollback = true)。這樣做操作的數據才不會污染數據庫!
AbstractTransactionalDataSourceSpringContextTests要想構建這一系列的無污染純綠色事務測試框架就必須找到這個基類!(即所有事務均不生效)
@Transactional這個非常關鍵,如果不加入這個注解配置,事務控制就會完全失效!
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)這里的事務關聯到配置文件中的事務控制器(transactionManager = "transactionManager"),同時指定自動回滾(defaultRollback = true)。這樣做操作的數據才不會污染數據庫!
AbstractTransactionalDataSourceSpringContextTests要想構建這一系列的無污染純綠色事務測試框架就必須找到這個基類!(即所有事務均不生效)
@ActiveProfiles(value="dev")配置環境選擇
其次,在src/test/resource目錄,我們只要放一個spring-context.xm配置文件,把所有的在src/main/resource下配置文件和資源文件加載進來就可以spring-context.xm里面加載到spring中就可以,所以這個目錄一般就一個xml文件,其他都是配置的properties文件。
我的配置文件spring-context.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context.xsd 9 http://www.springframework.org/schema/aop 10 http://www.springframework.org/schema/aop/spring-aop.xsd"> 11 12 <!-- <context:property-placeholder location="classpath*:jdbc.properties" /> --> 13 14 <import resource="spring-dao.xml" /> 15 <beans profile="dev" > 16 <context:property-placeholder location="classpath*:jdbc-dev.properties" /> 17 </beans> 18 <beans profile="sit" > 19 <context:property-placeholder location="classpath*:jdbc-sit.properties" /> 20 </beans> 21 </beans>