Junit學習筆記1
package com.gdnt.rnd.ework.servlet;
import org.apache.log4j.Logger;
import java.io.IOException; import java.io.File; import java.util.Enumeration;
import javax.servlet.ServletException; import javax.servlet.http.HttpSession;
import junit.textui.TestRunner;
import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import com.gdnt.rnd.config.TestPropertyManager; import com.kenoah.base.action.Action; import com.meterware.servletunit.ServletRunner; import com.meterware.servletunit.ServletUnitClient; import com.meterware.servletunit.InvocationContext; import com.meterware.httpunit.HttpUnitOptions; import com.meterware.httpunit.WebClient; import com.meterware.httpunit.WebRequest; import com.meterware.httpunit.WebResponse; import com.meterware.httpunit.PostMethodWebRequest;
import org.xml.sax.SAXException;
public class GoHomeTest extends TestCase //在編寫一個單元測試類的時候要繼承junit.framework.TestCase; { static { TestPropertyManager.init();//這個是載入一些配置檔案,需要自己寫的,方法程式碼附後面 }
private static final Logger logger = Logger.getLogger(GoHomeTest.class);//日誌記錄
public static void main(String[] args) { TestRunner.run(GoHomeTest.class);//這個就可以當作普通的工程來執行,不用特意去用JUNIT運行了 }
public static Test suite() { TestSuite suite = new TestSuite(GoHomeTest.class);//有這個才能作為Test,原因暫不明 return suite; }
protected void setUp() throws Exception { super.setUp(); }
protected void tearDown() throws Exception { super.tearDown(); }
public void testGoHomeOK()//JUNIT或HttpUnit如果需要執行,所測試方法的名稱都要在前面加上test否則和缺少suite方法一樣,說不是No Test in.. { HttpUnitOptions.setExceptionsThrownOnScriptError(false);//如果需要用到頁面,可以遮蔽頁面本身的Script錯誤. try { ServletRunner runner = new ServletRunner(new File( "web/WEB-INF/web.xml"), "/eform");//啟動容易,指定使用的配置檔案和URL路徑 ServletUnitClient client = runner.newClient();//產生客戶端 ClsUlity clsUlity = new ClsUlity();//自己寫的類 WebResponse responseLogin = clsUlity.Login("webmaster", "", client); this.updateCookie(client, responseLogin);//這個部分是登入,因為後面要驗證,這個工程是更新cookie. WebRequest requestGoHome = new PostMethodWebRequest( "
private void updateCookie(WebClient webClient, WebResponse webResponse) { String[] names = webResponse.getNewCookieNames(); for (int i = 0; i < names.length; i++) { webClient.putCookie(names[i], webResponse .getNewCookieValue(names[i])); } } }
心得: 關於junit或httpunit的測試工程: 需要有suite()方法測試方法名字前面必須有test字首需要繼承junit.framework.TestCase
關於Servlet的session: 獲取session:通過ServletUnitClient的getSession方法,可以拿到HttpSession型別的session物件設定session內容:通過HttpSession的setAttribute(name,value)可以設定session裡面的內容獲取session內容:通過HttpSession的返回Object型別資料的getAttribute(name)可以設定session裡面的內容,注:有個返回String型別的getValue(name)也可以,但是已註明過時. 關閉session:當用完session後,可以使用HttpSession.invalidate()方法關閉session。但是這並不是嚴格要求的。因為,Servlet引擎在一段時間之後,自動關閉seesion。