前言:
在做WEB項目時,我們寫好了一個Dao和Service后,接下來就是要進行單元測試,測試的時候還要等到Spring容器全部加載完畢后才能進行,然后通過拿到ApplicationContext對象來gerBean()方法進行測試,或者更笨點的就是寫一個控制器,在瀏覽器敲入地址進行deBug跟蹤測試,這樣不僅效率低,而且收效甚微。
本章來講解spring融合Junit4進行單元測試。
本章的測試源目錄和包是緊隨上一章節的源代碼。點我查看上一章節
准備工作:
- jar包支持(上一章節代碼里面已給出)
- 測試的源代碼和包結構(同上)
- 注意:測試類test包路徑最好位於src根目錄下,編譯后為calsses文件夾下,方便其他路徑的書寫
實例代碼演示:
****************復制該類至上一章節test包下即可************注釋部分我盡可能詳細講解****************
UserServiceTest
package test; import java.util.List; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort.Direction; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; import com.spring.jpa.user.User; import com.spring.jpa.user.UserService; /** 聲明用的是Spring的測試類 **/ @RunWith(SpringJUnit4ClassRunner.class) /** 聲明spring主配置文件位置,注意:以當前測試類的位置為基准,有多個配置文件以字符數組聲明 **/ @ContextConfiguration(locations={"../spring-config/spring-jpa.xml"}) /** 聲明使用事務,不聲明spring會使用默認事務管理 **/ @Transactional /** 聲明事務回滾,要不測試一個方法數據就沒有了豈不很杯具,注意:插入數據時可注掉,不讓事務回滾 **/ @TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true) public class UserServiceTest { @Resource private UserService userService; @Test // 新增(來個20條數據) 注意新增的時候先把事務注掉,要不會回滾操作 public void testSaveUser() { for(int i=0; i<20; i++){ User user = new User(); user.setUserName("system"); user.setPassWord(i+"system"); userService.saveUser(user); } } @Test // 刪除 有事務回滾,並不會真的刪除 public void testDeleteUser() { userService.deleteUser(27L); } @Test // 查詢所有 public void testFindAllUser() { List<User> users = userService.findAllUsers(); System.out.println(users.size()); } @Test // 查詢分頁對象 public void testFindAllUserByPage() { /** * 創建一個分頁對象 (注意:0代表的是第一頁,5代表每頁的大小,后兩個參數不寫即為默認排序) * Direction:為一個枚舉類,定義了DESC和ASC排序順序 * id:結果集根據id來進行DESC降序排序 * 想自己實現的話,最好繼承他這個類,來定義一些個性的方法 */ PageRequest request = new PageRequest(1, 4, Direction.DESC, "id"); Page<User> users = userService.findAllUserByPage(request); // 打印分頁詳情 System.out.println("查詢結果:共"+users.getTotalElements()+"條數據,每頁顯示"+users.getSize()+"條,共"+users.getTotalPages()+"頁,當前第"+(users.getNumber()+1)+"頁!"); // 打印結果集的內容 System.out.println(users.getContent()); } // main 用於查看spring所有bean,以此可以檢測spring容器是否正確初始化 public static void main(String[] args) { // 我這里使用的是絕對路徑,請根據你項目的路徑來配置(相對路徑挖不出來-OUT了) String [] path = {"E:/moviework/springJpa/src/spring-config/spring-jpa.xml"}; ApplicationContext ac = new FileSystemXmlApplicationContext(path); String[] beans = ac.getBeanDefinitionNames(); for(String s : beans) { System.out.println(s); // 打印bean的name } } }
測試testFindAllUserByPage()方法控制台輸出sql語句和信息:
完事,就是這么簡單,和普通java類的測試多的只是注解的東西。原理還是一樣的,並且它支持事務的回滾,不用擔心在測試的時候對數據進行破壞。只有用了你才能體會原來Spring 框架的 WEB項目測試也可以這么的簡潔。
數據都是基於上一章節來的,本章節不再貼出,項目打包的下載地址也在上一章節。點我前往上一章節
總結:
- 平時在編寫test類的時候,寫在src目錄下更方便閱讀和代碼的編寫
- 遵守測試規范,測試類方法名為:test + 原方法名首字母大寫
- 注意@ContextConfiguration注解路徑的引用
寫作不易,難免有疏漏和錯誤,還請慷慨指正,覺得有幫助幫忙推薦哦
ps:歡迎轉載,轉載請注明出處:http://www.cnblogs.com/liuyitian/p/4063033.html
每天多學一點點 代碼少敲一點點