使用jmock对HttpServlet类进行单元测试
2011-12-30 23:31
337 查看
1.创建UploadServlet类
2.创建辅助类XmlUtils
3.创建MockedTests类
4.使用jmock进行测试
测试结果输出为:
package com.anllin.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import static com.anllin.servlet.XmlUtils.*; public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 7320350794641788612L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String ipAndPort = String.format("http://%s:%s", req.getServerName(), req.getLocalPort()); String serviceProviderXml = constructResponseXMl(ipAndPort); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/xml"); PrintWriter out = resp.getWriter(); out.append(serviceProviderXml); out.flush(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } protected String constructResponseXMl(String ipAndPort) { Document doc = ConstructDocument(); Element root = constructElement("ServiceProvider"); doc.addContent(root); Element title = constructElement("title", "Test"); Element description = constructElement("description", "Upload data in everyday"); Element url = constructElement("url", ipAndPort + "/test/upload"); constructChildTree(root, title, description, url); Format format = getFormat("utf-8", " "); String xml = getXMLStringFromDocunment(doc, format); return xml; } }
2.创建辅助类XmlUtils
package com.anllin.servlet; import java.io.StringReader; import java.util.Arrays; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; public class XmlUtils { public static Element parse(String xml) { try { SAXBuilder builder = new SAXBuilder(); StringReader sr = new StringReader(xml); Document doc = builder.build(sr); return doc.getRootElement(); } catch (Exception e) { throw new RuntimeException(e); } } public static Document ConstructDocument() { return new Document(); } public static Element constructElement(String name) { return new Element(name); } public static Element constructElement(String name, String text) { return new Element(name).setText(text); } public static Element constructChildTree(Element father, Element... childs) { List<Element> list = Arrays.asList(childs); father.addContent(list); return father; } public static Format getFormat(String encoding, String indent) { return Format.getPrettyFormat().setEncoding(encoding).setIndent(indent); } public static XMLOutputter getXMLOutputter(Format format) { return new XMLOutputter(format); } public static String getXMLStringFromDocunment(Document doc, Format format) { return getXMLOutputter(format).outputString(doc); } }
3.创建MockedTests类
package com.anllin.servlet; import org.jmock.Mockery; import org.jmock.integration.junit4.JMock; import org.jmock.integration.junit4.JUnit4Mockery; import org.junit.runner.RunWith; @RunWith(JMock.class) public class MockedTests { protected Mockery mockery = new JUnit4Mockery(); }
4.使用jmock进行测试
package com.anllin.servlet; import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jdom.Element; import org.jmock.Expectations; import org.junit.Before; import org.junit.Test; public class UploadServletTest extends MockedTests { private UploadServlet uploadServlet; private HttpServletRequest req; private HttpServletResponse resp; private ByteArrayOutputStream out; @Before public void setUp() throws Exception { uploadServlet = new UploadServlet(); req = mockery.mock(HttpServletRequest.class); resp = mockery.mock(HttpServletResponse.class); out = new ByteArrayOutputStream(); } @Test public void testDoGet() throws Exception { mockery.checking(new Expectations() { { one(req).getServerName(); will(returnValue("192.168.0.62")); one(req).getLocalPort(); will(returnValue(8080)); one(resp).setCharacterEncoding("utf-8"); one(resp).setContentType("text/xml"); PrintWriter writer = new PrintWriter(out); allowing(resp).getWriter(); will(returnValue(writer)); } }); uploadServlet.doGet(req, resp); Element root = XmlUtils.parse(out.toString()); assertTrue(root.getChildren().size() > 0); } }
测试结果输出为:
<?xml version="1.0" encoding="utf-8"?> <ServiceProvider> <title>Test</title> <description>Upload data in everyday</description> <url>http://192.168.0.62:8080/test/upload</url> </ServiceProvider>
相关文章推荐
- asp.net mvc3 对HttPost来的表单使用moq进行单元测试
- 使用Visual Studio 2013进行单元测试--初级篇(转http://***/Article/11186)
- 在Eclipse中使用JUnit4进行单元测试(高级篇)
- (第三周)使用visual studio 2015进行单元测试
- 使用 Spring 进行单元测试
- 使用Mockito和Roboletric进行Android单元测试
- 使用Jmeter进行http接口测试
- 因为使用了无效的方法(HTTP 动作)进行访问
- Maven项目中使用JUnit进行单元测试
- JS中使用XMLHttpRequest对象进行Ajax操作
- 转:在Eclipse中使用JUnit4进行单元测试(初级篇)
- 在Eclipse中使用JUnit4进行单元测试
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- 在Eclipse中使用JUnit4进行单元测试入门
- MyEclipse中使用JUnit进行单元测试
- 使用Mockito进行单元测试【2】—— stub 和 高级特性
- 转 使用NUnit在.Net编程中进行单元测试
- 在Eclipse中使用JUnit4进行单元测试(1)
- [置顶] Retrofit与OkHttp进行HTTP网络编程使用指南
- 使用HttpURLConnection进行POST方式提交