日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

用cactus,jetty實現對servlet類進行單元測試一

系統 2633 0

JUnit 是名聲大燥了,想必只要學過 JAVA 的人都知道世上有個東東叫 JUnit 。記得有個想學 JUnit 的兄弟在群上大喊:我要學 JUnit ,因為 JUnit 應用最廣,最好的單元測試工具。無法否認, JUnit 是一個非常讓 JAVA 程度員或白盒測試人員喜愛的一個框架。但有時候應用最廣的未必就是萬能的,最好的未必就是最合適的。

JUnit 也是有缺點的。想象一下,你有一個 web 程序,非常簡單的那種,是用 servlet 實現的,你希望對其中的 loginUser () 方法進行單元測試,代碼如下:

?

package com.test.servlet;

?

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

?

public class LoginServlet extends HttpServlet {

?

??? private static final long serialVersionUID = -5174161414983884806L;

?

??? public boolean loginUser (HttpServletRequest request) {

??????? String username = request.getParameter( "username" );

??????? String password = request.getParameter( "password" );

??? if (username == null || password == null || !username.equals( "cuckoo" )

??????????????? || !password.equals( "123" )) {

??????????? return false ;

??????? } else {

??????????? return true ;

??????? }

??? }

}

?

為了能夠測試這個方法,你需要得到一個合法的 HttpServletRequest 對象。但不幸的是,你不可能調用 new HttpServletRequest 來創建一個可用的請求。因為 HttpServletRequest 的生命周期是由容器管理的,因此你無法單獨使用 JUnit loginUser 方法編寫測試類。

? ?? 此時我們今天的主角就要出來了,它就是 cactus cactus 是什么?仙人掌嗎?呵呵,當然不是了。仙人掌只是它翻譯過來的中文名。它如 commons-dbutils commons-beanutils 等等一樣,是 apache 上的一個開源框架。下載地址為 http://jakarta.apache.org/cactus/index.html 或是 http://archive.apache.org/dist/jakarta/cactus/ ? 用官網是話說, cactus 就是

Cactus is a simple test framework for unit testing server-side java code (Servlets, EJBs, Tag Libs, Filters, ...).

The intent of Cactus is to lower the cost of writing tests for server-side code. It uses JUnit and extends it.

Cactus 是一個基于 JUnit 框架的簡單測試框架,用來單元測試服務端 Java 代碼。 Cactus 框架的主要目標是能夠單元測試服務端的使用 Servlet 對象的 Java 方法 httpServletRequest,HttpServletResponse,HttpSession 等。 Cactus 的工作原理在官網上也可以找到,那有詳細的說明,以下是其中的一種: 圖來自于cactus官網

用cactus,jetty實現對servlet類進行單元測試一

Cactus provides several TestCase classes that extends the JUnit Testcase and it also provides several kind of redirectors (Servlet Redirector, JSP Redirector, ...). The diagram above is a generic diagram which serves to explain the principles. You'll find details for a specific redirector proxy in the next section. YYYTestCase = ( ServletTestCase | FilterTestCase | JspTestCase ) XXX is the name of the test case. Each YYYTestCase class contains several test cases

這是官網的簡單說明,意思是: cactus 提供了幾個 TestCase 的類擴展了 JUnit TestCase 的,同時也提供了若干種轉向器(重定向程序組件, JSP 的重定向, ...). 上圖是一個普通的圖,這足以解釋的原則。你會發現,在未來一段特定的重定向代理細節。 YYYTestCase = ServletTestCase | FilterTestCase | JspTestCase XXX 是測試案例的名稱。每個 YYYTestCase 類包含幾個測試案例。

我們將使用 Cactus ServletTestRedirector 作為上圖介紹的 Redirector Proxy ,并使用 Cactus ServletTestRunner 作為執行測試時的 TestRunner ,這兩個被撰寫為 Servlet ,所以要在 web.xml 中加以定義,代碼為:

<? xml version = "1.0" encoding = "UTF-8" ?>

< web-app version = "2.5" xmlns = "http://java.sun.com/xml/ns/javaee"

??? xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"

??? xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee

??? http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >

?

??? <!--

??? <description>cactus test</description>

??? <display-name>cactusTest</display-name>

??? ? -->

??? < servlet >

??????? < servlet-name > ServletRedirector </ servlet-name >

??????? < servlet-class > org.apache.cactus.server.ServletTestRedirector </ servlet-class >

??? </ servlet >

??? < servlet >

??????? < servlet-name > ServletTestRunner </ servlet-name >

??????? < servlet-class > org.apache.cactus.server.runner.ServletTestRunner </ servlet-class >

??? </ servlet >

? < servlet >

??? < servlet-name > LoginServlet </ servlet-name >

??? < servlet-class > com.test.servlet.LoginServlet </ servlet-class >

? </ servlet >

?

??? < servlet-mapping >

??????? < servlet-name > ServletRedirector </ servlet-name >

??????? < url-pattern > /ServletRedirector </ url-pattern >

??? </ servlet-mapping >

??? < servlet-mapping >

??????? < servlet-name > ServletTestRunner </ servlet-name >

??????? < url-pattern > /ServletTestRunner </ url-pattern >

??? </ servlet-mapping >

? < servlet-mapping >

??? < servlet-name > LoginServlet </ servlet-name >

??? < url-pattern > / servlet /LoginServlet </ url-pattern >

? </ servlet-mapping >

? </ web-app >

用cactus,jetty實現對servlet類進行單元測試一


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 凤城市| 辽宁省| 榆社县| 西安市| 邹城市| 名山县| 抚顺市| 怀来县| 柏乡县| 敦煌市| 栾川县| 新绛县| 新野县| 忻州市| 固镇县| 满洲里市| 乐平市| 元朗区| 东至县| 五峰| 南丰县| 淳化县| 大同市| 武邑县| 神池县| 黑山县| 庄河市| 高清| 南陵县| 准格尔旗| 广南县| 武定县| 精河县| 阿坝| 陵川县| 安岳县| 盖州市| 潼关县| 平潭县| 离岛区| 环江|