1. 程式人生 > >JUnit學習筆記13---對servlet和filter進行單元測試2

JUnit學習筆記13---對servlet和filter進行單元測試2

package junitbook.servlets;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import junit.framework.TestCase;

import org.apache.commons.beanutils.BasicDynaClass;
import
org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaProperty; import com.mockobjects.dynamic.C; import com.mockobjects.dynamic.Mock; public class TestAdminServletMO extends TestCase { private Mock mockRequest; 建立新的mock private Mock mockResponse; private
HttpServletRequest request; private HttpServletResponse response; private AdminServlet servlet; protected void setUp() { servlet = new AdminServlet() ; { ; public Collection executeCommand(String command) ; throws
Exception ; { return createCommandResult(); } }; mockRequest = new Mock(HttpServletRequest.class); 你在程式碼中使用了一個HttpServletRequest物件來測試;之所以這樣做是因為 request = (HttpServletRequest) mockRequest.proxy();你不是在一個容器內執行,你需要為它建立一個仿製品。 mockResponse = new Mock(HttpServletResponse.class); 設定mock的HttpServletRequest物件的行為,同時讓DynaMock去查證 response = (HttpServletResponse) mockResponse.proxy(); 方法被呼叫而且傳遞的引數與所期望的匹配。 } protected void tearDown() ;讓你的mock查證你設定的預期和你為之定義的行為的方法被呼叫了。 { mockRequest.verify(); } public void testGetCommandOk() throws Exception { mockRequest.expectAndReturn("getParameter", "command", ;當你帶有”command”字串作為引數的getParameter方法時, "SELECT..."); ;讓mock返回“select…” String command = servlet.getCommand(request); assertEquals("SELECT...", command); } public void testGetCommandNotDefined() { mockRequest.expectAndReturn("getParameter", ;當呼叫了帶有字串getParameter方法時,讓mock返回null C.isA(String.class), null); try { servlet.getCommand(request); fail("Command should not have existed"); } catch (ServletException expected) { assertTrue(true); } } private Collection createCommandResult() throws Exception { List results = new ArrayList(); DynaProperty[] props = new DynaProperty[] { new DynaProperty("id", String.class), new DynaProperty("responsetime", Long.class) }; BasicDynaClass dynaClass = new BasicDynaClass("requesttime", null, props); DynaBean request1 = dynaClass.newInstance(); request1.set("id", "12345"); request1.set("responsetime", new Long(500)); results.add(request1); DynaBean request2 = dynaClass.newInstance(); request1.set("id", "56789"); request1.set("responsetime", new Long(430)); results.add(request2); return results; } public void testCallView() throws Exception { servlet.callView(request); } public void testDoGet() throws Exception { mockRequest.expectAndReturn("getParameter", "command", "SELECT..."); // Verify that the result of executing the command has been // stored in the HTTP request as an attribute that will be // passed to the JSP page. mockRequest.expect("setAttribute", C.args(C.eq("result"), C.isA(Collection.class))); servlet.doGet(request, response); } }