欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

在Spring中整合JUnit單元測(cè)試-創(chuàng)新互聯(lián)

一 簡(jiǎn)介

在Java Web開(kāi)發(fā)中,通常我們會(huì)開(kāi)發(fā)很多的功能代碼。在代碼正式使用之前,為了確保代碼能夠正確實(shí)現(xiàn)我們預(yù)期的功能,最好是添加一些簡(jiǎn)單代碼對(duì)代碼邏輯進(jìn)行測(cè)試。很顯然,JUnit就是一個(gè)不錯(cuò)的單元測(cè)試工具,同時(shí)在Spring中我們也可以很方便地引入JUnit進(jìn)行測(cè)試

成都創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)邢臺(tái),十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

二 代碼實(shí)例

(1)引入必需的jar包:

這里除了Spring以及其他模塊所需要的jar包之外,還需要引入:

  • spring-test-4.2.3.RELEASE.jar

  • junit-4.10.jar

注:jar包版本使用最新穩(wěn)定版即可

(2)測(cè)試項(xiàng)目目錄結(jié)構(gòu)以及配置:

在Spring中整合JUnit單元測(cè)試

上面圖中的一些目錄是我自己新建的,為的就是將不同功能的文件分隔開(kāi)。這個(gè)Demo項(xiàng)目采用的技術(shù)是:Spring + Spring MVC + Mybatis + MySQL + Druid連接池

context.xml文件是一些基本配置;springmvc-servlet.xml文件是 Spring MVC相關(guān)的配置;sql-map-config.xml文件是Mybatis相關(guān)配置。下面我粘貼下web.xml文件和context.xml文件的代碼供大家參考,其他的一些配置文件跟這里關(guān)系不大就不粘貼出來(lái)了

i)web.xml:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
	  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:context/context.xml
		</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<listener>
		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
	</listener>
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:context/springmvc-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!-- <url-pattern>*.html</url-pattern> -->
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>

	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>
	<filter>
		<filter-name>druidWebStatFilter</filter-name>
		<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
		<init-param>
			<param-name>exclusions</param-name>
			<param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value>
		</init-param>
		<init-param>
			<param-name>principalSessionName</param-name>
			<param-value>sessionInfo</param-value>
		</init-param>
		<init-param>
			<param-name>profileEnable</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>druidWebStatFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

ii)context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:cache="http://www.springframework.org/schema/cache" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
			http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
            http://www.springframework.org/schema/jee 
            http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/cache  
       		http://www.springframework.org/schema/cache/spring-cache-4.0.xsd  
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop">

	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:jdbc.properties</value>
			</list>
		</property>
	</bean>

	<!-- Druid連接池,文檔:https://github.com/alibaba/druid/wiki/常見(jiàn)問(wèn)題 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<!-- 數(shù)據(jù)庫(kù)基本信息配置 -->
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
		<property name="driverClassName" value="${driverClassName}" />
		<property name="filters" value="${filters}" />
		<!-- 大并發(fā)連接數(shù) -->
		<property name="maxActive" value="${maxActive}" />
		<!-- 初始化連接數(shù)量 -->
		<property name="initialSize" value="${initialSize}" />
		<!-- 配置獲取連接等待超時(shí)的時(shí)間 -->
		<property name="maxWait" value="${maxWait}" />
		<!-- 最小空閑連接數(shù) -->
		<property name="minIdle" value="${minIdle}" />
		<!-- 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
		<!-- 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
		<property name="validationQuery" value="${validationQuery}" />
		<property name="testWhileIdle" value="${testWhileIdle}" />
		<property name="testOnBorrow" value="${testOnBorrow}" />
		<property name="testOnReturn" value="${testOnReturn}" />
		<property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
		<!-- 打開(kāi) removeAbandoned 功能 -->
		<property name="removeAbandoned" value="${removeAbandoned}" />
		<!-- 1800 秒,也就是 30 分鐘 -->
		<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
		<!-- 關(guān)閉 abanded 連接時(shí)輸出錯(cuò)誤日志 -->
		<property name="logAbandoned" value="${logAbandoned}" />
	</bean>

	<!-- MyBatis相關(guān)配置 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:context/sql-map-config.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="cn.zifangsky.mapper" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>

	<!-- 事務(wù)相關(guān)配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

注:jdbc.properties文件:

url: jdbc:mysql://localhost:3306/cookie_db
driverClassName: com.mysql.jdbc.Driver
username: root
password: root
filters: stat,wall
maxActive: 100
initialSize: 10
maxWait: 60000
minIdle: 10
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 123
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
maxOpenPreparedStatements: 20
removeAbandoned: true
removeAbandonedTimeout: 1800
logAbandoned: true

(3)新建測(cè)試的DAO層的代碼:

由于我這里使用的是Mybatis,因此就直接使用“mybatis-generator”插件自動(dòng)生成一些基本文件了

注:關(guān)于“mybatis-generator”插件的使用想了解更多可以參考我的這篇文章:https://www.zifangsky.cn/431.html

(4)單元測(cè)試示例:

在src/test/java目錄下新建TestUserTable.java,其內(nèi)容如下:

package cn.zifangsky.test.base;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;

import cn.zifangsky.mapper.UserMapper;
import cn.zifangsky.model.User;
import junit.framework.Assert;

@RunWith(SpringJUnit4Cla***unner.class)
@ContextConfiguration(locations={"classpath:/context/context.xml"})
public class TestUserTable {
	@Autowired
	UserMapper userMapper;
	
	@Test
	public void testSelectByPrimaryKey(){
		User user = userMapper.selectByPrimaryKey(1);
		
//		System.out.println(user.getName());
		Assert.assertEquals("admin", user.getName());  //預(yù)期值-實(shí)際值
	}

}

關(guān)于這里的代碼我簡(jiǎn)單解釋下:

  1. @RunWith注解配置了此次測(cè)試使用的環(huán)境

  2. @ContextConfiguration注解配置了基本的Spring配置文件的路徑

  3. UserMapper 是一個(gè)具體的DAO層的類,使用@Autowired注解自動(dòng)注入到這個(gè)單元測(cè)試中

  4. @Test注解標(biāo)注的方法被當(dāng)做一個(gè)測(cè)試方法,里面的內(nèi)容隨意。當(dāng)然,這里僅僅只是測(cè)試了根據(jù)主鍵查詢一個(gè)實(shí)體

  5. junit.framework.Assert 這個(gè)類可以用于斷言,這里就是判斷從數(shù)據(jù)庫(kù)中查出來(lái)的用戶名是否為“admin” 。如果是,那么此次測(cè)試成功,如果不是則測(cè)試失敗。如果不習(xí)慣這種寫(xiě)法的話還可以使用我注釋掉的那樣直接在控制臺(tái)中打印一些數(shù)據(jù),然后我們?cè)偈謩?dòng)判斷

(5)運(yùn)行單元測(cè)試:

關(guān)于單元測(cè)試,可以有以下幾種方式來(lái)運(yùn)行測(cè)試,分別是:

  1. 在標(biāo)注了@Test注解的方法上鼠標(biāo)右鍵選擇:Run As –> JUnit Test ,這種方式測(cè)試的就是這一個(gè)方法

  2. 在一個(gè)單元測(cè)試的Java類上鼠標(biāo)右鍵選擇JUnit單元測(cè)試,這種方式測(cè)試的是這個(gè)類中的所有標(biāo)有@Test注解的方法

  3. 在一個(gè)包或者一個(gè)目錄上選擇JUnit單元測(cè)試。很顯然,這種方式的測(cè)試的實(shí)例更多

如果一個(gè)方法測(cè)試成功,那么在JUnit視圖中是這樣的:

在Spring中整合JUnit單元測(cè)試

相反,測(cè)試失敗顯示的視圖是這樣的:

在Spring中整合JUnit單元測(cè)試

PS:上面圖片中的水印是我個(gè)人博客的域名,因此還請(qǐng)管理員手下留情不要給我標(biāo)為“轉(zhuǎn)載文章”,謝謝?。?!

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。

網(wǎng)站標(biāo)題:在Spring中整合JUnit單元測(cè)試-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://aaarwkj.com/article2/coccic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站搜索引擎優(yōu)化、虛擬主機(jī)、定制開(kāi)發(fā)、建站公司網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
国产日韩传媒在线观看| 日韩欧美短视频在线观看| 日本东京热不卡一区二区| 真做的欧美三级在线观看| 色橹橹欧美午夜精品福利| 97成人在线视频免费播放| 亚洲av污精品一区二区三区| 亚洲97成人在线视频| 黄色黄色片黄色片黄色| 亚洲另类欧美日韩中文字幕| 日韩欧美亚洲制服丝袜| 农村精品少妇久久久久久| 亚洲欧美日韩一区中文天国| 97人妻人人澡人人添人人爽| 中国亚洲黄色录像免费看| 日韩伦理高清在线观看| 成人综合影视中文字幕| 少妇高潮一区二区三区99| 久久国产精品乱码电影| 日本人妻久久中文字幕精品| 国产精品日本欧美久久久| 一区二区在线日韩视频| 成年人免费在线观看国产| 国产又大又长又粗又硬又猛| 亚洲另类欧美日韩中文字幕| 久久夜色精品亚洲国产| 日韩成人中文字幕在线视频| 国产精品一级在线播放| 国产精品专区日产一区| 欧美三级欧美一级视频看 | 国产精品一区二区麻豆本子| 三级黄色片免费久久久| 99精品国产综合久久麻豆| 蜜桃视频在线观看视频免费| 亚洲高清无毛一区二区| 日韩人成理论午夜福利| 欧美亚洲国产精品久久久| 日韩精品专区在线影院重磅| 九九在线精品视频免费| 97人妻人人澡人人添人人爽| 日本久久高清免费观看|