1. 如何在不啓動Tomcat服務器的狀況下對,Dao這些不依賴使用Servlet API的類來進行單元測試呢?html
其實在Spring框架體系中,已經有一套本身的測試代碼,其中就是依賴使用Junit來進行測試 ,不須要啓動Tomcat就能夠對Dao來進行測試。java
至於什麼是Junit呢,參見Junit。spring
2. 首先的第一步,就是添加依賴的類庫,這裏就須要再一次使用到神器Maven了,在pom.xml中添加api
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.2.2.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency>
在這裏,須要注意一下,spring版本與Junit版本的兼容問題。前面我使用Spring是4.2.2的,在官方的文檔中講到服務器
NOTE: As of Spring Framework 4.1, this class requires JUnit 4.9 or higher.app
因此我使用了Junit 4.9 以上,不然運行JunitCase會拋異常框架
3. 編寫TestCaseless
package test;
import java.util.Iterator; import java.util.List; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import cn.tian.dao.*; import cn.tian.vo.*; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; //首先指定Junit的Runner @RunWith(SpringJUnit4ClassRunner.class) //指明配置文件所在 @ContextConfiguration(locations="classpath:applicationContext.xml") //指定事務管理器 @Transactional(transactionManager="transactionManager") //繼承AbstractTransactionalJUnit4SpringContextTests來獲取Spring上下文環境來獲取Bean public class UserDaoTest extends AbstractTransactionalJUnit4SpringContextTests{ //spring依賴注入 @Autowired private UserDao dao; //JUnit註解 ,代表這是一個須要運行的測試方法 @Test public void test(){ User admin = new User(); admin.setName("管理員"); dao.insert(user); } }
就這樣簡單,就能夠輕鬆佈置JUnit的測試環境了單元測試
4. 補充:若是在Web項目中配置有bean 的scope爲「application」的時候,運行測試會顯示Spring Context初始化錯誤。須要在添加一個註解@WebAppConfiguration,把WebApplicationContext加載上來,就解決了測試
原文:https://my.oschina.net/asd1614/blog/530528