qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          SpringJunit4 進行單元測試

          前言:
            在做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注解路徑的引用

          posted on 2014-11-12 10:04 順其自然EVO 閱讀(305) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年11月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鹤峰县| 四子王旗| 山阴县| 江口县| 葫芦岛市| 夏河县| 富民县| 莆田市| 天祝| 栾城县| 大庆市| 遂溪县| 鄂州市| 樟树市| 会泽县| 祁阳县| 彭州市| 休宁县| 阿巴嘎旗| 宜昌市| 赣榆县| 区。| 珠海市| 潮州市| 土默特左旗| 旺苍县| 莱阳市| 天水市| 赤水市| 大同市| 汤阴县| 伊宁县| 辽源市| 前郭尔| 上饶市| 靖西县| 潞西市| 皋兰县| 基隆市| 保亭| 星座|