1. 程式人生 > >Junit單元測試Spring框架介面

Junit單元測試Spring框架介面

Web專案整合Spring後,所有的介面,類都可以載入到ApplicationContext中。專案不用啟動也可以載入到記憶體中,並通過applicationContext獲取。

使用main方法測試,如下:

package testCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xy.domain.CategoryDTO;
import com.xy.service.ProductIndexService;

public class MyTest {
	public static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");
	public static void main(String[] args) throws Exception{
		ProductIndexService productIndexService = (ProductIndexService)applicationContext.getBean("productIndexService");
		CategoryDTO categoryDTO = new CategoryDTO();
		categoryDTO.setCategoryName("測試類目");
		categoryDTO.setCategoryLevel(1);
		categoryDTO.setCategoryDesc("main方法測試類目");
		productIndexService.insertCategory(categoryDTO);
	}
}

使用main方法有以下的不足:

1.不能使用@AutoWire自動注入獲取service,只能通過getBean()方式獲取。

2.呼叫增、刪、改以後,資料都會留在表裡,只能手動刪除表中資料。一般來說測試不需要表裡保留資料。

3.如果要測試的類裡面有多個方法,用main方法測試就很不方便。

使用Junit測試以後就可以解決以上的問題。

準備:

需要下載junit的jar包,引入專案內。(Junit4.8).

引入spring相關jar包(Spring-test)。

測試基類:

spring中提供了兩種支援Junit的父類。

AbstractTransactionalJUnit4SpringContextTests//需要spring配置事務
AbstractJUnit4SpringContextTests//不需要事務
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>
在測試類中需要加入@RunWith和@ContextConfiguration來自動載入Spring上下文資訊。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application-context.xml")
編寫測試基類:
package base;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Junit測試基類
 * 繼承AbstractJUnit4SpringContextTests
 * @author javaw
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application-context.xml")
public class BaseTestCase extends AbstractJUnit4SpringContextTests{

}

package base;

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;

/**
 * Junit測試基類
 * 繼承AbstractTransactionalJUnit4SpringContextTests
 * 可實現事務回滾
 * @author javaw
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application-context.xml")
public abstract class BaseTransactionTestCase extends AbstractTransactionalJUnit4SpringContextTests{

}

測試類:

可以使用@Autowired或者@Resource將serivce層注入。

package testCase;


import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import base.BaseTransactionTestCase;

import com.xy.domain.CategoryDTO;
import com.xy.service.ProductIndexService;

public class ProductIndexTestCase extends BaseTransactionTestCase{
	@Autowired
	public ProductIndexService productIndexService;

	@Before
	public void setUp() throws Exception {
		
	}
	
	@Test
	public void testInsertCategory() throws Exception{
		CategoryDTO categoryDTO = new CategoryDTO();
		categoryDTO.setCategoryName("測試類目");
		categoryDTO.setCategoryLevel(1);
		categoryDTO.setCategoryDesc("Junit測試類目");
		int i = productIndexService.insertCategory(categoryDTO);
		Assert.assertEquals(1, i);
	}
}


測試類分別繼承BaseTestCase和BaseTransactionTestCase,分別執行了insert方法以後,繼承BaseTestCase時,資料庫中增加了一條資料。

繼承BaseTranscationTestCase時,資料庫中並沒有插入資料。可見事務已經自動回退掉了。

相關推薦

Junit單元測試Spring框架介面

Web專案整合Spring後,所有的介面,類都可以載入到ApplicationContext中。專案不用啟動也可以載入到記憶體中,並通過applicationContext獲取。 使用main方法測試,如下: package testCase; import org.sp

spring框架_03 junit單元測試

 單元測試不是頭一次聽說了,但只是聽說從來沒有用過。一個模組怎麼測試呢,是不是得專門為一單元寫一個測試程式,然後將測試單元程式碼拿過來測試? 我是這麼想的。學到spring框架這才知道單元測試原來是這麼回事兒。  下面以上一篇文章中set注入的第一個例項為測試物件。進

Spring Boot Junit單元測試

摘要: Junit這種老技術,現在又拿出來說,不為別的,某種程度上來說,更是為了要說明它在專案中的重要性。 憑本人的感覺和經驗來說,在專案中完全按標準都寫Junit用例覆蓋大部分業務程式碼的,應該不會超過一半。 剛好前段時間寫了一些關於SpringBoot的帖子,正好現在把Junit再拿

SSH框架JUnit單元測試遇到的Bug

問題描述 專案框架使用SpringMVC&Spring&MyBatis框架開發,在tomcat容器中執行正常,但是使用JUnit對DAO層進行單元測試出現BindingException,異常日誌: org.apache.ibatis.binding.BindingE

junit單元測試框架

一般我們寫程式碼總想對方法測試一下結果,就存在這些問題:   1.如果方法需要測試,都需要在main方法上呼叫   2.目前的結果都需要我們人工對比   所以就需要用到 junit 進行測試:   1·下載 junit 的jar包並匯入   2.在需要測試的方法上加 “@Test”,然後

Spring整合Spring MVC及Mybatis進行Junit單元測試

我們可以在不啟動服務的情況下,進行單元測試,以便提交出高質量的程式碼。本文以一個小例子,說明在Spring中如何進行單元測試。 一:測試Controller 1:在pom.xml檔案中引入相關依賴 <properties> <!-- 設定專案編碼編碼 --&

Spring 整合Junit單元測試

1、在pom增加junit和spring-test <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <v

Junit單元測試+aop+spring+執行緒池,在進行Junit測試時切面中執行緒池內呼叫的方法不執行

一、問題背景: 寫了一個切面,指向某service包下的所有類及方法,當該service包下方法被呼叫時切面執行,切面中用了執行緒池ExecutorService pool = Executors.newFixedThreadPool(5);執行緒池內呼叫了dao層的方法。 二、問題描述:單

Spring Boot---(11)SpringBoot使用Junit單元測試

摘要:本文詳細的記錄了SpringBoot如何結合Junit寫測試用例,如何執行,打包執行,忽略執行等操作,SpringBoot內建了Junit測試元件,使用很方便,不用再單獨引入其他測試元件。 演示環境: SpringBoot + mybatis 開發工具:IntelliJ IDEA

spring+junit4時用Junit單元測試遇到的bug:java.lang.ExceptionInInitializerError

一、詳細錯誤日誌: 二、具體描述: 由於第一次用spring+Junit4進行單元測試,對他們瞭解不夠深入,出現這個bug時真的是手忙腳亂的,各種百度,各種嘗試就是解決不了,網上好多方法都試了就是不行,現在想來不是網上的解決方法不行,而是我遇到的問題和他們不一樣啊。網上說j

Spring Mybatis jUnit 單元測試

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:springConfig/spring-db.xml"}) 單個檔案  @ContextCon

SpringTest框架JUnit單元測試用例獲取ApplicationContext例項的方法

JUnit單元測試用例中使用Spring框架,之前我的使用方式很直接。 /** * 用於需要用到Spring的測試用例基類 * * @author lihzh * @alia OneCoder * @blog http://www.

Spring對Controller、Service、Dao進行Junit單元測試總結

Spring對Controller、Service、Dao進行Junit單元測試總結 [email protected]事務控制,避免資料庫出現髒資料(若要提交到資料庫,先注掉) 2.hibernate配置檔案 <property name="defaultAutoComm

spring Junit單元測試 bean 無法注入的問題

本人菜鳥在學習ssh 過程 ,遇見問題 向各位大佬請教。進行單元測試 爆出下面提示: 貼出下面配置資訊: applicationContext.xml 實現service 介面類 實現dao介面類 單元測試 進過本菜鳥的各種錯嘗試,上面的配置檔案內容沒有錯誤,只是整合框架的過

Spring mvc 之Junit 單元測試 Controller中方法

               Springmvc 之Junit 單元測試 1.   首先引入測試的jar包。 1.1因為我用的ide是eclipse,現只介紹eclipse中junit的使用。首先引用eclipse中自帶的junit, 方法: 右鍵專案—>proper

Spring 筆記 -01- JUnit 單元測試

Spring 筆記 -01- Junit 單元測試 本篇介紹單元測試,就是說一個專案不必完整就可以執行,之前有介紹的是在 Eclipse 中建立動態 web 專案,這裡先建立 Maven 專案,也是在實際專案中應用最多的。 單元測試步驟: 提示:先連上網 一、建立專案:

JUnit單元測試框架的使用

原文地址 http://www.open-open.com/lib/view/open1462177214142.html 我們寫單元測試,一般都會用到一個或多個單元測試框架,在這裡,我們介紹一下JUnit4這個測試框架。這是Java界用的最廣泛,也是最基礎的一個框架,其他

Java JUnit 單元測試框架

JUnit是一個Java語言的單元測試框架。 Junit 測試也是程式設計師測試,即所謂的白盒測試 如使用eclipse 開發,不用新增jar包,eclipse內部已經集成了,我們只需要引入即可使用。 1.新增方法,【專案】上右擊,選擇Build Path ,進入 2 .

Spring配置事務,Junit單元測試報錯"Failed to load ApplicationContext"

問題: Junit單元測試程式碼如下: package cn.muke.spring.demo2; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; imp

(27)Spring Boot Junit單元測試【從零開始學Spring Boot】

Junit這種老技術,現在又拿出來說,不為別的,某種程度上來說,更是為了要說明它在專案中的重要性。 那麼先簡單說一下為什麼要寫測試用例 1. 可以避免測試點的遺漏,為了更好的進行測試,可以提高測試效率 2. 可以自動測試,可以在專案打包前進行測試校驗 3. 可以及時發現因為