前言:
在做WEB項(xiàng)目時,我們寫好了一個Dao和Service后,接下來就是要進(jìn)行單元測試,測試的時候還要等到Spring容器全部加載完畢后才能進(jìn)行,然后通過拿到applicationContext對象來gerBean()方法進(jìn)行測試,或者更笨點(diǎn)的就是寫一個控制器,在瀏覽器敲入地址進(jìn)行deBug跟蹤測試,這樣不僅效率低,而且收效甚微。
本章來講解spring融合Junit4進(jìn)行單元測試。
本章的測試源目錄和包是緊隨上一章節(jié)的源代碼。點(diǎn)我查看上一章節(jié)
準(zhǔn)備工作:
實(shí)例代碼演示:
****************復(fù)制該類至上一章節(jié)test包下即可************注釋部分我盡可能詳細(xì)講解****************
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主配置文件位置,注意:以當(dāng)前測試類的位置為基準(zhǔn),有多個配置文件以字符數(shù)組聲明 **/@ContextConfiguration(locations={"../spring-config/spring-jpa.xml"})/** 聲明使用事務(wù),不聲明spring會使用默認(rèn)事務(wù)管理 **/@Transactional/** 聲明事務(wù)回滾,要不測試一個方法數(shù)據(jù)就沒有了豈不很杯具,注意:插入數(shù)據(jù)時可注掉,不讓事務(wù)回滾 **/@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)public class UserServiceTest { @Resource private UserService userService; @Test // 新增(來個20條數(shù)據(jù)) 注意新增的時候先把事務(wù)注掉,要不會回滾操作 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 // 刪除 有事務(wù)回滾,并不會真的刪除 public void testDeleteUser() { userService.deleteUser(27L); } @Test // 查詢所有 public void testFindAllUser() { List<User> users = userService.findAllUsers(); System.out.println(users.size()); } @Test // 查詢分頁對象 public void testFindAllUserByPage() { /** * 創(chuàng)建一個分頁對象 (注意:0代表的是第一頁,5代表每頁的大小,后兩個參數(shù)不寫即為默認(rèn)排序) * Direction:為一個枚舉類,定義了DESC和ASC排序順序 * id:結(jié)果集根據(jù)id來進(jìn)行DESC降序排序 * 想自己實(shí)現(xiàn)的話,最好繼承他這個類,來定義一些個性的方法 */ PageRequest request = new PageRequest(1, 4, Direction.DESC, "id"); Page<User> users = userService.findAllUserByPage(request); // 打印分頁詳情 System.out.println("查詢結(jié)果:共"+users.getTotalElements()+"條數(shù)據(jù),每頁顯示"+users.getSize()+"條,共"+users.getTotalPages()+"頁,當(dāng)前第"+(users.getNumber()+1)+"頁!"); // 打印結(jié)果集的內(nèi)容 System.out.println(users.getContent()); } // main 用于查看spring所有bean,以此可以檢測spring容器是否正確初始化 public static void main(String[] args) { // 我這里使用的是絕對路徑,請根據(jù)你項(xiàng)目的路徑來配置(相對路徑挖不出來-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類的測試多的只是注解的東西。原理還是一樣的,并且它支持事務(wù)的回滾,不用擔(dān)心在測試的時候?qū)?shù)據(jù)進(jìn)行破壞。只有用了你才能體會原來Spring 框架的 WEB項(xiàng)目測試也可以這么的簡潔。
數(shù)據(jù)都是基于上一章節(jié)來的,本章節(jié)不再貼出,項(xiàng)目打包的下載地址也在上一章節(jié)。點(diǎn)我前往上一章節(jié)
總結(jié):
寫作不易,難免有疏漏和錯誤,還請慷慨指正,覺得有幫助幫忙推薦哦
ps:歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處:http://m.survivalescaperooms.com/liuyitian/p/4063033.html
每天多學(xué)一點(diǎn)點(diǎn) 代碼少敲一點(diǎn)點(diǎn)
新聞熱點(diǎn)
疑難解答
圖片精選