使用Spring+Junit4進行測試


前言

  單元測試是一個程序員必備的技能,我在這里就不多說了,直接就寫相應的代碼吧。

單元測試基礎類

  

 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要想構建這一系列的無污染純綠色事務測試框架就必須找到這個基類!(即所有事務均不生效)
@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>

 

 



需要注意的地方:
測試方法命名:不能叫test方法,類也不能叫Test類


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM