亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

你好,請問都需要測什么啊?怎么寫它的測試類?

你好,請問都需要測什么???怎么寫它的測試類?

12345678_0001 2022-12-16 22:18:23
package com.practice.user; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import org.apache.struts.action.DynaActionForm; import com.practice.user.Check; import com.practice.user.ReadFile; public class RegisterAction extends Action { public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response)throws Exception{ DynaActionForm RegisterForm=(DynaActionForm)form; String username=(String)RegisterForm.get("username"); System.out.println(username); String password=(String)RegisterForm.get("password"); String passwords=(String)RegisterForm.get("passwords"); String gender=(String)RegisterForm.get("gender"); String birthday=(String)RegisterForm.get("birthday"); String address=(String)RegisterForm.get("address"); String telephone=(String)RegisterForm.get("telephone"); String email=(String)RegisterForm.get("email"); String PageForward=null; List allUserList=ReadFile.readAllUser(); System.out.println(allUserList); if(!Check.check(username, allUserList)){ String newUserValue=username+" |"+password+" |"+gender+" |"+birthday+" |" +address+" |"+telephone+" |"+email; WriteFile.write(newUserValue); PageForward="registersuccess"; } else{ ActionMessages errors = new ActionMessages(); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("usernamere")); if (!errors.isEmpty()) { saveErrors(request, errors); } PageForward="error"; } return mapping.findForward(PageForward); } } 
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

junit測試一般測試底層類的實現方法的

查看完整回答
反對 回復 2022-12-21
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

trutsTestCase for JUnit是Junit TestCase類的擴展,提供基于Struts框架的代碼測試裝置。StrutsTestCase同時提供Mock 對象方法和Cactus方法用來實際運行Struts ActionServlet,你既可以通過運行servlet引擎來測試,也可以不通過它。因為StrutsTestCase使用ActionServlet控制器來測試你的代碼,因此你不僅可以測試Action對象的實現,而且可以測試mappings,from beans以及forwards聲明。

下面是它的使用方法:

首先應從StrutsTestCase主頁下載該工具,解壓后會有一個JAR文件,還有一個例子以及API DOC。編寫StrutsTestCase時需將這個JAR文件引入到工程中(和Struts中的JAR文件放在一起),此外由于是對JUnit的擴展,因此還必須將Junit.jar引入到工程中。

上面已經介紹過有兩種測試方法,下面分別來簡單說明:

1) MockStrutsTestCase(Mock對象測試):通過模擬容器來進行測試。MockStrutsTestCase用一套HttpServlet mock對象在不需要運行Servlet引擎的情況下來模擬容器環境。

2) CactusStrutsTestCase(In-container testing):在真實運行的容器中通過使用Cactus測試框架進行測試。

說明:上述兩個類都是對Junit TestCase的擴展。如果要將Mock對象測試方法改為Cactus方法,只需要將我們所定義子類的父類由MockStrutsTestCase改為CactusStrutsTestCase即可,而不需要更改內部代碼。

命名規則:對于類的命名沒有嚴格的規范,但個人建議使用Test+要測試的Action名;方法名可以任意取,但注意一點:系統只會自動運行以”test”開頭的方法名來進行測試。

下面通過一個我寫的一個實例來說明具體使用方法,先來看一個Action(RegisterAction.java)中的代碼:

package com.firefly;
import org.apache.struts.action.*;
import javax.servlet.http.*;
/**
* @author firefly
*/

public class RegisterAction extends Action{

public ActionForward execute(ActionMapping mapping,ActionForm form,

HttpServletRequest req, HttpServletResponse res){

RegisterForm rf = (RegisterForm)form;

//String userName = rf.getUserName();

String password1 = rf.getPassword1();

String password2 = rf.getPassword2();

if(password1.equals(password2)){

try{

return mapping.findForward("success");

}

catch(Exception e){

return mapping.findForward("failure");

}

}

return mapping.findForward("failure");

}

}

功能很簡單,即查看兩次輸入的密碼是否相同,相同則轉到success,否則轉到failure。下面是測試代碼(TestRegisterAction.java):

package com.firefly;
import servletunit.struts.*;
/**
* @author firefly
*/

public class TestRegisterAction extends MockStrutsTestCase{

public void setUp() throws Exception{

super.setUp();

}

public void tearDown() throws Exception{

super.tearDown();

}

public TestRegisterAction(String testName){

super(testName);

}

public void testSuccessfulLogin(){

setRequestPathInfo("/register");

addRequestParameter("userName","hellking");

addRequestParameter("password1","123");

addRequestParameter("password2","123");

actionPerform();

verifyForward("success");

}

public void testFailedLogin(){

setRequestPathInfo("/register");

addRequestParameter("userName","hellking");

addRequestParameter("password1","123");

addRequestParameter("password2","");

actionPerform();

verifyForward("failure");
}
}
說明:

1) 如果override了setUp()和tearDown()方法,那么必須在第一行顯示調用其父類的相應方法,原因很簡單,父類在這兩個方法中定義了很多內容來保證程序能夠按照既定規則執行,所以我們必須加載它。

2) 在測試方法中,我們需要做的第一件事是通知Struts在這個測試中要使用哪一個映射(mapping),我們指定一個和Struts mapping相關聯的路徑,這與Struts標簽庫方法中使用的機制相同。

3) 我們接下來要做的是通過request對象傳遞form bean屬性,這同樣與Struts所做的相同。

4) 該到運行action的時候了,我們通過使用actionPerform()方法來完成該任務。

5) 最后要檢驗的是程序運行結果是否和我們所預期的一樣,通過調用verifyForward()方法來進行確認。這里還有可能用到其他一些方法,如:assertEquals(),assertNull(),verifyNoActionErrors(),verifyActionErrors()等等。

6) 即使你在test方法中不進行任何測試,系統也不會提示任何錯誤(這個與Action中execute()方法必須返回ActionMapping有所不同),顯示的測試結果仍然為成功。你可以在一個test方法中寫多個測試,但個人不建議這樣使用,這會給方法的命名及程序的結構帶來很大的困擾。此外,test方法中遇到測試失敗后便會立即返回,而不是繼續向下運行(這和and語句頗有相似之處)。

7) 主要函數和作用:

setRequestPathInfo,設置request的請求

addRequestParameter,將參數和對應的值加入request中

actionPerform,執行這個請求

verifyForward,驗證forward的名字是否正確

verifyForwardPath,驗證forward的path是否正確

verifyNoActionErrors,驗證在action執行過程中沒有ActionError產生

verifyActionErrors,驗證在action執行過程中產生的ActionError集合的內容

 


查看完整回答
反對 回復 2022-12-21
  • 2 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號