{"id":671,"date":"2010-05-26T15:40:25","date_gmt":"2010-05-26T13:40:25","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/2010\/05\/einfaches-testen-von-servlets-mit-string-test\/"},"modified":"2010-05-26T15:40:25","modified_gmt":"2010-05-26T13:40:25","slug":"einfaches-testen-von-servlets-mit-string-test","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2010\/05\/einfaches-testen-von-servlets-mit-string-test\/","title":{"rendered":"Einfaches Testen von Servlets mit string-test"},"content":{"rendered":"<p>Servlets zu schreiben geh\u00f6rt nun nicht gerade zu meinem Alltagsaufgaben, aber f\u00fcr ein JSON-Endpoint muss ein Servlet nun doch mit ins Boot. (REST-API geht leider nicht.) Einen Test daf\u00fcr zu schreiben finde ich selbstverst\u00e4ndlich, da ich geil auf gr\u00fcne Balken bin (nein, nicht die Download-Balken). Es kommen f\u00fcr Servlet-Tests unterschiedliche Ans\u00e4tze in Betracht, die sich grunds\u00e4tzlich in 2 Gruppen einteilen lassen:<\/p>\n<ul>\n<li>Tests mit einem echten (embedded) Servlet-Container<\/li>\n<li>Mock-Tests<\/li>\n<\/ul>\n<p>Dass ich ein Jetty-Fan bin ist vielleicht schon in fr\u00fcheren Posts r\u00fcbergekommen, aber hier lasse ich meinen Lieblingsserver links liegen und gehe auf die Mock-Tests. Gut funktioniert f\u00fcr mich <a href=\"http:\/\/static.springsource.org\/spring\/docs\/3.0.x\/spring-framework-reference\/html\/testing.html#mock-objects-servlet\">spring-test<\/a>. Ein Beispiel.<\/p>\n<p>Das Servlet:<\/p>\n<p>package com.tutego.traida.server.service.servlet;<\/p>\n<p>import java.io.IOException;   <br \/>import javax.servlet.ServletException;     <br \/>import javax.servlet.http.HttpServlet;     <br \/>import javax.servlet.http.HttpServletRequest;     <br \/>import javax.servlet.http.HttpServletResponse;     <\/p>\n<p>public class Raplet extends HttpServlet     <br \/>{     <br \/>&#160; private static final long serialVersionUID = 6942655630840028053L; <\/p>\n<p>&#160; @Override    <br \/>&#160; protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException,     <br \/>&#160;&#160;&#160;&#160;&#160; IOException     <br \/>&#160; {     <br \/>&#160;&#160;&#160; resp.getWriter().print( &quot;hello &quot; + req.getParameter( &quot;name&quot; ) );     <br \/>&#160; }     <br \/>}<\/p>\n<p>Der Test:<\/p>\n<p>package com.tutego.traida.server.service.servlet; <\/p>\n<p>import javax.servlet.ServletException;    <br \/>import org.junit.*;     <br \/>import static org.junit.Assert.*;     <br \/>import org.springframework.mock.web.*; <\/p>\n<p>public class RapletTest    <br \/>{     <br \/>&#160; private Raplet servlet = new Raplet();     <br \/>&#160; private MockHttpServletRequest request;     <br \/>&#160; private MockHttpServletResponse response; <\/p>\n<p>&#160; @Before    <br \/>&#160; public void before() throws ServletException     <br \/>&#160; {     <br \/>&#160;&#160;&#160; servlet.init( new MockServletConfig() ); <\/p>\n<p>&#160;&#160;&#160; this.servlet = new Raplet();    <br \/>&#160;&#160;&#160; this.request = new MockHttpServletRequest();     <br \/>&#160;&#160;&#160; this.response = new MockHttpServletResponse();     <br \/>&#160; } <\/p>\n<p>&#160; @Test    <br \/>&#160; public void doGetTest() throws Exception     <br \/>&#160; {     <br \/>&#160;&#160;&#160; request.setParameter( &quot;name&quot;, &quot;tutego&quot; ); <\/p>\n<p>&#160;&#160;&#160; servlet.doGet( request, response ); <\/p>\n<p>&#160;&#160;&#160; assertEquals( &quot;hello tutego&quot;, response.getContentAsString() );    <br \/>&#160; }     <br \/>}<\/p>\n<p>Einfacher geht\u2019s nun wirklich nicht mehr.<\/p>\n<p>Zum Ablaufen des Tests packe in den Klassenpfad:<\/p>\n<ul>\n<li><a href=\"http:\/\/grepcode.com\/snapshot\/repo1.maven.org\/maven2\/org.springframework\/spring-test\/3.0.2.RELEASE\">http:\/\/grepcode.com\/snapshot\/repo1.maven.org\/maven2\/org.springframework\/spring-test\/3.0.2.RELEASE<\/a> <\/li>\n<li><a href=\"http:\/\/grepcode.com\/snapshot\/repo1.maven.org\/maven2\/org.springframework\/spring-core\/3.0.2.RELEASE\">http:\/\/grepcode.com\/snapshot\/repo1.maven.org\/maven2\/org.springframework\/spring-core\/3.0.2.RELEASE<\/a><\/li>\n<\/ul>\n<p>Zwar bin ich kein Spring Fan Boy, aber mit 2 Archivdateien brennt die Jar-H\u00f6lle nicht so hei\u00df (<a href=\"http:\/\/grepcode.com\/static\/data\/html\/repo1.maven.org$maven2\/org.springframework$spring-test\/3.0.2.RELEASE\/visualization.svg\">die Abh\u00e4ngigkeiten sind \u00fcbertrieben<\/a>).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Servlets zu schreiben geh\u00f6rt nun nicht gerade zu meinem Alltagsaufgaben, aber f\u00fcr ein JSON-Endpoint muss ein Servlet nun doch mit ins Boot. (REST-API geht leider nicht.) Einen Test daf\u00fcr zu schreiben finde ich selbstverst\u00e4ndlich, da ich geil auf gr\u00fcne Balken bin (nein, nicht die Download-Balken). Es kommen f\u00fcr Servlet-Tests unterschiedliche Ans\u00e4tze in Betracht, die sich [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[4,15],"tags":[],"class_list":["post-671","post","type-post","status-publish","format-standard","hentry","category-open-source","category-web-frameworks"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=671"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/671\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}