1. 程式人生 > >Spring TestContext測試框架搭建

Spring TestContext測試框架搭建

異常:No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

解決方案:

原因是找不到配合檔案中的dataSource,由於整合的hibernate,使用的是hibernate.hbm.xml的配置資訊,沒有配置dataSource;

解決方法有兩種,

一種是去掉AbstractTransactionalJUnit4SpringContextTests,不繼承,可以直接測試,但是使用@Rollback(false)的時候,事件還是會回滾。

一種是是在appplicationContext.xml中配置上dateSource資料來源,這時候使用@Rollback(false)的時候,事件才不會回滾,會寫入資料庫


同樣是測試,JUnit和Spring TestContext相比,Spring TestContext優勢如下:

1.Spring TestContext可以手動設定測試事務回滾,不破壞資料現場

2.在測試類中不用手動裝配bean,只要一個@Autowired即可自動裝配

----------------分割線---------------------------

本文記錄web project和java project如何使用TestContext測試框架,首先介紹web project

現總結如何使用Spring TestContext測試框架:

1.測試框架環境搭建

要保證你的專案是web project,這樣在WebRoot/WEB-INF/lib包中引入spring-test.jar包即可。

(jar包位置:我用的是spring-framework-2.5.5,在這個資料夾中/dist/modules下有這個spring-test.jar

注意保證你的JUnit版本最好在4.5以上,否則可能會不支援JUnit4.5以下版本。

2.使用TestContext測試框架

applicationContext.xml檔案如下,我放在了src下面

複製程式碼
<?xml version ="1.0" encoding ="utf-8"
?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- Annotation宣告 --> <context:annotation-config /> <context:component-scan base-package="com.huohuo" /> <!-- 事務宣告 --> <tx:annotation-driven transaction-manager="txManager"/> <!-- 配置dataSource資料來源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/spring</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value></value> </property> </bean> <!-- 配置sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>com.huohuo.domain.User</value> <value>com.huohuo.domain.Log</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hbm2ddl.auto">update</prop> </props> </property> </bean> <!-- 配置事務TXManager --> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> </beans>
複製程式碼

userServiceTest類程式碼如下:

複製程式碼
package com.huohuo.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
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.huohuo.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class)                     
@ContextConfiguration(locations="/applicationContext.xml")  //Spring配置檔案位置
@TransactionConfiguration(transactionManager="txManager")    //我的事務bean 的id為txManager
 //重要說明:上面這行如果不加,那麼會自動尋找名為transactionManager的事務bean,如果你在applicationContext.xml設定的事務bean不是這個,那麼要改成你的事務bean的id名字
@Transactional
public class UserServiceTest {
   @Autowired //自動裝配bean,或者寫成@Resource(name="userService")
private UserService userService; @Rollback(false) //設定事務不回滾,如果不加預設為自動回滾 @Test public void test() { userService.saveUserAndLog(); } }
複製程式碼

小結

如果您希望在 Spring 環境中進行單元測試,那麼可以做如下配置:

  • 繼續使用 Junit4 測試框架,包括其 @Test 註釋標籤和相關的類和方法的定義,這些都不用變
  • 需要通過 @RunWith(SpringJUnit4ClassRunner.class) 來啟動 Spring 對測試類的支援
  • 需要通過 @ContextConfiguration 註釋標籤來指定 Spring 配置檔案或者配置類的位置
  • 需要通過 @Transactional 來啟用自動的事務管理
  • 可以使用 @Autowired 自動織入 Spring 的 bean 用來測試

另外您不再需要:

  • 手工載入 Spring 的配置檔案
  • 手工清理資料庫的每次變更
  • 手工獲取 application context 然後獲取 bean 例項

-------------分割線-------------

下面介紹普通java類使用TestContext測試框架

1.引入spring-test.jar包(上面有說明,或者去baidu下載)

2.測試類必須繼承extends AbstractTransactionalJUnit4SpringContextTests這個類

3.剩下的測試類中使用TestContext和上面web project一樣

java project專案中java測試類程式碼如下

複製程式碼
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations="/applicationContext.xml") 
@TransactionConfiguration(transactionManager="txManager")
@Transactional 
public class UserServiceTest extends AbstractTransactionalJUnit4SpringContextTests {

    @Rollback(false)
    @Test
    public void test() {
        ApplicationContext ct = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService us =(UserService)ct.getBean("userService");
        us.saveUserAndLog();
    }
複製程式碼 轉:http://www.cnblogs.com/BrowserSnake/p/3735209.html

相關推薦

Spring TestContext測試框架搭建

異常:No qualifying bean of type [javax.sql.DataSource] found for dependency: expected at least 1 bean which qualifies as autowire candidat

spock spring 整合測試框架搭建心得

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apach

mac robotframework測試框架搭建

robotframework、selenium、geckodriver、wxpython前後反復裝卸花了快三天才裝好,這篇是安裝成功後回憶寫的,可能有遺漏,有的話請指出來,謝謝~系統版本: macOS 10.12.2 ;mac 自帶的Python 2.7.10 1.安裝 pip 終端裏面sudo e

自動化測試框架搭建之企業級實戰經驗

自動化框架搭建實戰業務特征: 問題: 1, 根據目前的業務特征如何選取合適的自動化測試工具&框架? 本文出自 “運維自動化” 博客,請務必保留此出處http://shower.blog.51cto.com/4926872/1978981自動化測試框架搭建之企業級實戰經驗

自動化測試框架搭建1-思路

自動化測試框架搭建思路: 1.需要一個網站來管理需要執行的測試指令碼 2.需要一個python框架來支援編寫測試指令碼目前使用flask+selenium+unittest+jenkins 3.思路是每個測試指令碼都屬於一個python測試方法,然後通過flask路由執行到每個測試指令碼。這樣只要訪問一

Jmeter+Ant+Jenkins介面自動化測試框架搭建for Windows

前言 軟體開發的V模型大家都不陌生,其中測試階段分為單元測試→功能測試→系統測試→驗收測試。其中單元測試一般由開發同學們自己完成,大部分測試具體實施(這裡不包括用例設計)是從單體功能測試開始著手的。 如果測試一個功能,發現主流程無法走下去,也就是介面不通,這時再打回去開發手裡繼續改,改

HTTP介面自動化經驗總結(三)Okhttp3 介面測試框架搭建之資料處理

上篇文章寫了怎麼新建POST,GET方法。這篇文章介紹下該如何校驗。 因為我們在方法裡面都返回了String型別結果,String型別校驗起來比較麻煩。多數http介面返回的都是json形式。我們可以寫一個通用方法將String型別轉換為Map物件這樣校驗就比較方便準確了。廢話不多說直接上方法。

HTTP介面自動化經驗總結(二)Okhttp3 介面測試框架搭建

搭建這套環境前,需要Eclipse安裝testNG,Maven 1.Eclipse安裝testNG https://mp.csdn.net/postedit/81868683 2.Eclipse安裝Maven http://www.cnblogs.com/pengyan-9826/p

2.RobotFramework自動化測試框架搭建--通過pip(推薦)

本文基於Windows10,Python27   一.安裝Python python-2.7.10.amd64.msi 1.直接雙擊執行,下一步下一步...... 2.配置環境變數,在系統變數path後面加上C:\Python27和C:\Python27\Scri

1.RobotFramework自動化測試框架搭建

此篇這些步驟只能達到RIDE介面展示的效果,並不能實現一些基礎用例的測試【比如開啟火狐搜尋百度】有些環境配置出了問題== ; 問題主要在於seleniumlibrary安裝失敗; 後續會再更新一個可以跑起來用例的學習文件---具體見2.RobotFramework自動化測試框架搭建

Dubbo+SpringBoot+Spring+SpringMVC+MyBatis框架搭建的Demo中遇到的錯誤

遇到的報錯問題: com.alibaba.dubbo.remoting.RemotingException: message can not send, because channel is closed . url:dubbo://192.168.43.177:20880/com.test.s

spring---入門測試專案搭建

本博文參考傳智播客、黑馬程式設計師視訊講座 spring簡介 簡單的說,spring是一個裝物件的容器。兩個重要思想:IoC和AOP 專案搭建 導包 核心包(對應上面的圖Core Container下的四個)+日誌包

基於Jmeter和Jenkins介面自動化測試框架搭建詳細過程

 1. 下載地址 Jmeter: http://jmeter.apache.org/download_jmeter.cgi Ant:http://ant.apache.org/bindownload.cgi Jenkins:https://jenkins.io/inde

java版本-API介面測試框架搭建

基本概念:testng ,http, json, mysql, jenkins, spring 陸陸續續搭建起來的介面測試框架,使用起來並不是特別的理想,所以走上了一條迭代優化的不歸路。 所謂的框架是指,用例的組織,批量執行,測試報告,引數化配置。 測試框架應該

web自動化測試框架搭建( Java+Cucumber+Gradle) _Mac_3

1. 建立一個Gradle projectfile-->new-->Other-->Gradle Project2. 修改build.gradle// plugin  apply pl

Web自動化測試一:Eclipse+TestNG單元測試框架搭建

一、Eclipse+TestNG單元測試框架搭建 網上有很多種辦法,我試了幾種,最後是方法2完成搭建工作,詳細說明如下: 方法1   方法2 1、啟動Eclipse,點選help——>Marketplace,find  中搜索TestNG後勾選進行進行安裝Test

web自動化測試框架搭建( Java+Cucumber+Gradle) _Mac_2

一.安裝Gradle1. 使用ruby安裝Mac的包管理器homebrew2. 待brew安裝ok之後,使用brew安裝gradlebrew install gradle3. 確認本機的gradle版本

Spring+Springmvc+Hibernate框架搭建,簡單例項

最近學習spring框架,學習中總是磕磕絆絆的,出現這樣或者那樣的問題,於是就像寫一篇筆記,將spring,springmvc,hibernate框架整合的過程,以及簡單的實現記錄下來,一來加深印象,二來一遍以後忘記好找資料(...)當然,初學者也可以借鑑一下。廢話不多說,

jenkins+jmeter+maven介面自動化測試框架搭建【maven專案建立】

一、jmeter指令碼錄製或編寫        根據自己習慣錄製或編寫jmeter指令碼,保證指令碼可正確執行。 二、用eclipse建立maven專案 1.File->New->Project...開啟new project視窗(如下圖), 2.選擇

jenkins+jmeter+maven介面自動化測試框架搭建【HTML 報告展示】

1.maven專案中建立/src/jmeter/resources路徑,將jmeter中的extras路徑下如下模板檔案複製到maven專案中的/src/jmeter/resources路徑下(也可以根據自己的需要下載其他目標放在這個路徑下即可) 2.pom檔案中新