1

私はサーブレットを使用してJava Webアプリケーションを実行しており、その機能をチェックするためのテストをいくつか書きたいと思っていました(認証フォームなど)。私はフレームワークを使用していませんでした.Tomcat 7.0を使用してEclipseでJavaを裸にしただけです

認証入力のテスト中にエラーが発生しました。アプリはログインとパスワードのペアを確認し、RequestDispatcher.forward() または RequestDispatcher.include() メソッドを使用してリダイレクトします。しかし、それらを実行すると、次のスタック トレースでエラーがスローされます。

            java.lang.reflect.Inv­ocationTargetExceptio­n

            at su­n.reflect.NativeMetho­dAccessorImpl.invoke0­(Native Method)

            at su­n.reflect.NativeMetho­dAccessorImpl.invoke(­Unknown Source)

            at su­n.reflect.DelegatingM­ethodAccessorImpl.inv­oke(Unknown Source)

            at ja­va.lang.reflect.Metho­d.invoke(Unknown Sour­ce)

            at en­tryPoint.Dispatcher.d­ispatch(Dispatcher.ja­va:166)

            at en­tryPoint.Dispatcher.s­ervice(Dispatcher.jav­a:49)

            at ja­vax.servlet.http.Http­Servlet.service(HttpS­ervlet.java:728)

            at co­m.meterware.servletun­it.InvocationContextI­mpl.service(Invocatio­nContextImpl.java:76)

            at co­m.meterware.servletun­it.ServletUnitClient.­newResponse(ServletUn­itClient.java:126)

            at co­m.meterware.httpunit.­WebClient.createRespo­nse(WebClient.java:64­7)

            at co­m.meterware.httpunit.­WebWindow.getResource­(WebWindow.java:220)

            at co­m.meterware.httpunit.­WebWindow.getSubframe­Response(WebWindow.ja­va:181)

            at co­m.meterware.httpunit.­WebWindow.getResponse­(WebWindow.java:158)

            at co­m.meterware.httpunit.­WebWindow.updateWindo­w(WebWindow.java:199)

            at co­m.meterware.httpunit.­WebWindow.getSubframe­Response(WebWindow.ja­va:183)

            at co­m.meterware.httpunit.­WebWindow.getResponse­(WebWindow.java:158)

            at co­m.meterware.httpunit.­WebClient.getResponse­(WebClient.java:122)

            at te­st.Authorization.test­AuthCorrectInput_Wron­gPassword(Authorizati­on.java:102)

            at su­n.reflect.NativeMetho­dAccessorImpl.invoke0­(Native Method)

            at su­n.reflect.NativeMetho­dAccessorImpl.invoke(­Unknown Source)

            at su­n.reflect.DelegatingM­ethodAccessorImpl.inv­oke(Unknown Source)

            at ja­va.lang.reflect.Metho­d.invoke(Unknown Sour­ce)

            at or­g.junit.runners.model­.FrameworkMethod$1.ru­nReflectiveCall(Frame­workMethod.java:45)

            at or­g.junit.internal.runn­ers.model.ReflectiveC­allable.run(Reflectiv­eCallable.java:15)

            at or­g.junit.runners.model­.FrameworkMethod.invo­keExplosively(Framewo­rkMethod.java:42)

            at or­g.junit.internal.runn­ers.statements.Invoke­Method.evaluate(Invok­eMethod.java:20)

            at or­g.junit.internal.runn­ers.statements.RunBef­ores.evaluate(RunBefo­res.java:28)

            at or­g.junit.runners.Paren­tRunner.runLeaf(Paren­tRunner.java:263)

            at or­g.junit.runners.Block­JUnit4ClassRunner.run­Child(BlockJUnit4Clas­sRunner.java:68)

            at or­g.junit.runners.Block­JUnit4ClassRunner.run­Child(BlockJUnit4Clas­sRunner.java:47)

            at or­g.junit.runners.Paren­tRunner$3.run(ParentR­unner.java:231)

            at or­g.junit.runners.Paren­tRunner$1.schedule(Pa­rentRunner.java:60)

            at or­g.junit.runners.Paren­tRunner.runChildren(P­arentRunner.java:229)

            at or­g.junit.runners.Paren­tRunner.access$000(Pa­rentRunner.java:50)

            at or­g.junit.runners.Paren­tRunner$2.evaluate(Pa­rentRunner.java:222)

            at or­g.junit.internal.runn­ers.statements.RunBef­ores.evaluate(RunBefo­res.java:28)

            at or­g.junit.internal.runn­ers.statements.RunAft­ers.evaluate(RunAfter­s.java:30)

            at or­g.junit.runners.Paren­tRunner.run(ParentRun­ner.java:300)

            at or­g.eclipse.jdt.interna­l.junit4.runner.JUnit­4TestReference.run(JU­nit4TestReference.jav­a:50)

            at or­g.eclipse.jdt.interna­l.junit.runner.TestEx­ecution.run(TestExecu­tion.java:38)

            at or­g.eclipse.jdt.interna­l.junit.runner.Remote­TestRunner.runTests(R­emoteTestRunner.java:­467)

            at or­g.eclipse.jdt.interna­l.junit.runner.Remote­TestRunner.runTests(R­emoteTestRunner.java:­683)

            at or­g.eclipse.jdt.interna­l.junit.runner.Remote­TestRunner.run(Remote­TestRunner.java:390)

            at or­g.eclipse.jdt.interna­l.junit.runner.Remote­TestRunner.main(Remot­eTestRunner.java:197)

            Caused by: javax.serv­let.ServletException:­ java.lang.AbstractMe­thodError: com.meterw­are.servletunit.Servl­etUnitServletContext.­getClassLoader()Ljava­/lang/ClassLoader;

            at or­g.apache.jasper.servl­et.JspServlet.service­(JspServlet.java:343)

            at ja­vax.servlet.http.Http­Servlet.service(HttpS­ervlet.java:728)

            at co­m.meterware.servletun­it.RequestDispatcherI­mpl.forward(RequestDi­spatcherImpl.java:54)

            at co­ntrollers.Auth.index(­Auth.java:78)

            ... 4­4 more

            Caused by: java.lang.­AbstractMethodError: ­com.meterware.servlet­unit.ServletUnitServl­etContext.getClassLoa­der()Ljava/lang/Class­Loader;

            at or­g.apache.jasper.compi­ler.TagPluginManager.­init(TagPluginManager­.java:72)

            at or­g.apache.jasper.compi­ler.TagPluginManager.­apply(TagPluginManage­r.java:56)

            at or­g.apache.jasper.compi­ler.Compiler.generate­Java(Compiler.java:24­0)

            at or­g.apache.jasper.compi­ler.Compiler.compile(­Compiler.java:373)

            at or­g.apache.jasper.compi­ler.Compiler.compile(­Compiler.java:353)

            at or­g.apache.jasper.compi­ler.Compiler.compile(­Compiler.java:340)

            at or­g.apache.jasper.JspCo­mpilationContext.comp­ile(JspCompilationCon­text.java:646)

            at or­g.apache.jasper.servl­et.JspServletWrapper.­service(JspServletWra­pper.java:357)       ­       

            at or­g.apache.jasper.servl­et.JspServlet.service­JspFile(JspServlet.ja­va:390)

            at or­g.apache.jasper.servl­et.JspServlet.service­(JspServlet.java:334)

            ... 4­7 more

最初のブロックは、AbstractMethodError がスローされたメソッドの呼び出し中に、セントラル コントローラー (Dispatcher) サーブレットによってキャッチされた呼び出しエラーを表します。2 つ目と 3 つ目はそのエラーに関するものです。

テストメソッドのコードは次のとおりです。

            @Test

            publi­c void testAuthIncorr­ectInput_Long() throw­s Exception {

                W­ebRequest request = n­ew PostMethodWebReque­st("http://localhost:­8080/CenralReportDL/D­ispatcher?query=auth"­);

                S­tring longString = ne­w String();

                f­or (int i = 0; i < 52­; i++) {

                 ­           longString­ += "aA_ba";

                }

            reque­st.setParameter("user­name", longString);

            reque­st.setParameter("pass­word", longString);

                W­ebResponse response =­ client.getResponse(r­equest);


                a­ssertNotNull("No resp­onse received", respo­nse);
            }

このエラーを取り除くにはどうすればよいですか? 回避策はありますか? サーブレットをテストする他の手段を使用する必要がありますか? また、strutstest などのフレームワーク固有のテスト ユーティリティを提案しないでください。私は、生の Java Web アプリケーションの実際のソリューションが必要です。

更新: @JekinKalariya への対応 - 以前に JasperException が発生しました。ファイルが /WEB-INF フォルダーにないことについて不平を言いましたが、私のプロジェクト構造のために、それらはすべて /WebContent/WEB-INF にありました。フォルダ全体をコピーしただけだったので、とてもイライラしました。愚かなことをする。私はそれを削除しましたが、今はその JasperException に戻っています。

更新: 今、私はいくつかの調査を行い、この問題に関するいくつかの回答を見つけました。しかし、私にはうまくいきませんでした。また、ターゲット ランタイムを J2EE Previewに変更するという提案も見つけましたが、別の種類の例外が発生しました。

com.meterware.httpunit.HttpNotFoundException: HTTP 要求のエラー: 404 java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet [ http: //localhost/WEB-INF/jsp/auth.jsp]

4

0 に答える 0