SpringでサーブレットをUNITテストするには

このQ&Aのポイント
  • Spring2.5のモックを利用してJUnit4でテストする方法
  • protected voidのdoGetをPublic voidに変更する方法
  • 他のJavaサーブレットの自動テスト方法や利用可能なJUnit4関連の方法についての質問
回答を見る
  • ベストアンサー

SpringでサーブレットをUNITテストするには

はじめまして。 Spring2.5のモック 「MockHttpServletRequest」や 「MockHttpServletResponse」を利用して、 JUnit4でテストしようと数日試しています。 @Test Public void testGet() { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); ABCServlet testWork = new ABCServlet(); try { testWork.doGet(request, response); } catch (Exception e) { e.printStackTrace(); fail("NGResultTest"); } } ABCServlet内のdoGetが、 protected voidで定義されている為、 そこをPublic voidに変更すれば 動くのですが、 大量に同じようなJavaサーブレットファイルが存在して、 テストのたびに毎回その変更をするのは 現実的ではない状態です。 そこで1点質問させてください。 Springで上記のようなJavaサーブレットを (protected voidのdoGet) JUnit4でテストする場合、 みなさんどのようにテストなさっていらっしゃるのでしょうか? なお、 上記のテスト方法以外でも、、 Javaサーブレットを自動テストする 良い方法がございましたら、 ぜひ教えてください。 (Jakarta Cakutasを利用しようと思ってネットで調べたところ、  JUnit3対応のみで、JUnit4で使えないようでした。  JUnit4関係で利用可能な方法を教えていただけると  ありがたいです) 以上になります。 どうぞよろしくおねがいします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#147388
noname#147388
回答No.1

protected って同じパッケージ にテストケースを作成(別ソースディレクトリ)

hiroasa21
質問者

お礼

回答をありがとうございます。

関連するQ&A

  • JUnit4でサーブレットをテストするには?

    JUnit4でサーブレット(doGet、doPostなど)をテストするには、 どのような方法がよいでしょうか? ネットで調べると、Jakarta Cactusやモックオブジェクト(JMockit)や DIコンテナ(Spring)など、いろいろな情報がありましたが、 どれが現状(2011年7月現在)において、 ベストな方法なのでしょうか? 以上になります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • サーブレットの動作

    以下のようなサーブレットのプログラムがあります。 本サーブレットを実行すると、simpleDB.jspに飛ぶようになっています。 疑問点は以下です。 ・GetやPostを使って送られてくるデータがないのに、なぜ  本プログラムが動くのか分かりません(根本的に分かって  ないんですが)。 ・getServletContext().setAttribute("list", employeeList)で  listに設定をしてますが、listは飛ぶ先のsimpleDB.jspで定義  されています。なぜこのサーブレットで定義されていないものを、  設定することが可能なのでしょうか? 以上、ご回答頂けると幸いです。 ---------- import java.io.IOException; import文以下略 public class EmployeeServlet extends javax.servlet.http.HttpServlet { /** * 初期化メソッド * 社員一覧をapplicationスコープにセットします */ public void init() { EmployeeDAO dao = new EmployeeDAO();     //EmployeeDAOクラスは他で定義済み ArrayList<Employee> employeeList = dao.findAll(); getServletContext().setAttribute("list", employeeList); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * リクエストを処理するメソッド * simpleDB.jspに移動し、社員一覧を表示します */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nextPage = "/view/simpleDB.jsp"; ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher(nextPage); rd.forward(request, response); } }

    • ベストアンサー
    • Java
  • サーブレットのコンパイルについて

    はじめまして。 学校の課題の方でJSP/サーブレットをやっているのですが、サーブレットのコンパイルが通りません。 プログラムとエラーと環境変数は以下の通りです。 【プログラム】 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { printWriter out = response.getWriter(); out.println("hello"); } } 【エラー】 HelloServlet.java:2: パッケージ javax.servlet は存在しません。 import javax.servlet.*; ^ HelloServlet.java:3: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.*; ^ HelloServlet.java:5: シンボルを解決できません。 シンボル: クラス HttpServlet 場所 : HelloServlet の クラス public class HelloServlet extends HttpServlet ^ HelloServlet.java:7: シンボルを解決できません。 シンボル: クラス HttpServletRequest 場所 : HelloServlet の クラス public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException ^ HelloServlet.java:7: シンボルを解決できません。 シンボル: クラス HttpServletResponse 場所 : HelloServlet の クラス public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException ^ HelloServlet.java:7: シンボルを解決できません。 シンボル: クラス ServletException 場所 : HelloServlet の クラス public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException ^ HelloServlet.java:9: シンボルを解決できません。 シンボル: クラス printWriter 場所 : HelloServlet の クラス printWriter out = response.getWriter(); 【環境変数】 CATALINA_HOME C:\servletbook\apache-tomcat CLASSPATH %CATALINA_HOME%\common\lib\jsp-api.jar;%CATALINA_HOME%\webapps\atmarkit\WEB-INF\classes;%CATALINA_HOME%\common\lib\servlet-jsp.jar; よろしくお願いします。

  • サーブレット初歩に関して。

    package oty; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Otys */ public class Otys extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Otys() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } 初期状態がこんな状態なんですが、これになにを追加したらhelloworldとでますか?? 普通にJAVA入門みたいに、System.out.printlnしたらいいんでしょうか??

    • ベストアンサー
    • Java
  • サーブレットを始めようとしたのですが・・・

    サーブレットを始めようとして、「10日でおぼえるJSP/サーブレット入門教室」を使って勉強しようとしているのですが、最初のファイルをコンパイルしようとしたら下記のようなエラーが出てコンパイルできませんでした。 SrvIntro.java:6: パッケージ javax.servlet は存在しません。 import javax.servlet.ServletException; ^ SrvIntro.java:7: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.HttpServlet; ^ SrvIntro.java:8: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.HttpServletRequest; ^ SrvIntro.java:9: パッケージ javax.servlet.http は存在しません。 import javax.servlet.http.HttpServletResponse; ^ SrvIntro.java:11: シンボルを解決できません。 シンボル: クラス HttpServlet 場所 : day07.SrvIntro の クラス public class SrvIntro extends HttpServlet{ ^ SrvIntro.java:12: シンボルを解決できません。 シンボル: クラス HttpServletRequest 場所 : day07.SrvIntro の クラス public void doGet(HttpServletRequest request, HttpServletResponse respon se) ^ SrvIntro.java:12: シンボルを解決できません。 シンボル: クラス HttpServletResponse 場所 : day07.SrvIntro の クラス public void doGet(HttpServletRequest request, HttpServletResponse respon se) ^ SrvIntro.java:13: シンボルを解決できません。 シンボル: クラス ServletException 場所 : day07.SrvIntro の クラス throws ServletException, IOException{ ^ エラー 8 個 調べた感じだとクラスパスの設定が間違っている可能性大ということらしいのですが、何度確かめてもクラスパスは合ってると思うのです・・ 何かこれじゃないか?という原因に心当たりがあればよろしくお願いします。

    • ベストアンサー
    • Java
  • サーブレットを動かすためには?

    Tomcat5.0を使ってサーブレットを動かそうとしましたが、動きません。 JSPは問題なく動きます。 サーブレットのコンパイルは問題なくできているようです。また、ほかで動いていたものをためしに使ってみたのですが、動きません。 何か、設定をしなければならないのでしょうか。 現在は、サーブレットを動かそうとすると、 HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 javax.servlet.ServletException: パス /yoko/servlet/test にサーブレットインスタンスを割り当てられません org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:388) org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 原因 java.lang.IllegalAccessException: Class org.apache.catalina.core.StandardWrapper can not access a member of class test with modifiers "" sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57) java.lang.Class.newInstance0(Class.java:302) java.lang.Class.newInstance(Class.java:261) org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:369) org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) このように表示されています。 何が原因なのか、対処策など、わかることがありましたらお教えください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • サーブレットでダウンロードしたJARを使う

    JSPのサーブレット内で、ダウンロードしてきた「iText」というJARファイルの中のクラスを使いたいのですが、エラーが出て困っています。 ソースコードで説明させていただくと、 package selfinfo; import java.io.*; import com.lowagie.text.Document;//iTextのクラス import com.lowagie.text.pdf.PdfWriter;//iTextのクラス import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class test extends javax.servlet.http.HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Document doc = new Document();//iTextが提供するクラ                      //スここでエラーがでる } } 開発環境はTomcatとEclipseを連動させてたものを使っています。 またエラーの種類は、Eclipseのエディタ上ではエラーは出ないのですが、Tomcat上で動作させ、jspからサーブレットにうつったときに、 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 javax.servlet.ServletException: サーブレットの実行により例外を投げました 原因 java.lang.NoClassDefFoundError: com/lowagie/text/Documentselfinfo.test.doPost(test.java:37) というようなエラーが出ます。 またEclipseでこのコードを最も基本的なJAVAアプリケーションに落とし込んだ場合は、正常に動作しました。 長くなりましたが、お返事お待ちしております。

    • ベストアンサー
    • Java
  • doPost+doGet

    public class Class{ public void doPost (HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException try{ //処理 }catch(Exception e){ e.printStackTrace(); } } public void doGet (HttpServletRequest request,HttpServletResponse response){ try{ doPost(request, response); }catch(Exception e){ e.printStackTrace(); } } } この処理は、doGetで送信されたものをdoPostに送って処理するということでよろしいのでしょうか? 分かる方がいましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • JSPとサーブレットの連携

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("windows-31j"); response.setContentType("text/html;charset=windows-31j"); PrintWriter out=response.getWriter(); request.setCharacterEncoding("windows-31j"); String st = request.getParameter("ti"); String s2 = request.getParameter("ho"); String s3 = request.getParameter("ke"); Connection con = null; ResultSet rs = null; Statement stmt = null; try { String url = "jdbc:mysql:///o?user=&password=2&useUnicode=true&characterEncoding=windows-31J"; con = (Connection) DriverManager.getConnection(url); stmt = (Statement) con.createStatement(); String sql = "INSERT INTO o_tb(tiiki,houmon,keiyaku) VALUES('" + request.getParameter("ti")+ "','" + request.getParameter("ho")+ "','" + request.getParameter("ke")+ "') "; int rss=0; rss = stmt.executeUpdate(sql); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } JSPから上記のサーブレットに値を渡し、DB格納までは上手くいきました。 ですが当然上記だと真っ白なサーブレットページが表示されるだけです。 JSPのボタンを押し→サーブレットでDB格納したら、またJSPページを表示させたいんですが、どうしたらいいですか??

    • ベストアンサー
    • Java
  • jsp、サーブレットの質問です。

    スレッドサイトの投稿の部分の記述でうまくINSERTされません。 jpsで受け取った値をサーブレットにもっていきサーブレットでDB処理を行います。 ■jspファイルです <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.* "%> <html> <head> <title>Insert title here</title> </head> <body> <form method = "POST" action="/Web/thread"> <table border="2"> <tr> <td>タイトル</td> <td> <input type="text"name = "title" size="30" maxlength="30"value=""></td> </tr> <tr> <td>本文</td> <td><textarea name="text" rows="10" cols="50"></textarea></td> </tr> </table> <input type="submit" value="作成" /> </form> </body> </html> ■サーブレットファイルです。 public class Thread extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //入力された値 String title = request.getParameter("title"); String text= request.getParameter("text"); Connection con = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/web"; String user = "user"; String password = "pass"; String ins = "INSERT INTO thredlist(title,text)VALUES(?,?)"; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(url, user, password); ps = (PreparedStatement) con.prepareStatement(ins); ps.setString(1,title); ps.setString(2,text); //INSERT実行 int i = ps.executeUpdate(); }catch(SQLException e){ e.printStackTrace(); }finally{ con.close(); } } } ■DBの中身は画像を参照してくださいっ INSERT文を見直した方がよいのでしょうか? あとTomcatでやっています!

    • ベストアンサー
    • Java