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注解路徑的引用

                           寫作不易,難免有疏漏和錯誤,還請慷慨指正,覺得有幫助幫忙推薦哦

ps:歡迎轉載,轉載請注明出處:http://www.cnblogs.com/liuyitian/p/4063033.html

 


                                         每天多學一點點     代碼少敲一點點

 


免責聲明!

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



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