1

私のアプリケーションには、デフォルトのデータをロードし、ログインしたユーザー ID に基づいてセキュリティを設定する EntryServlet があります。このサーブレットは、依存性注入を通じて EJB を使用しています。通常の Web アプリケーションとして実行すると問題なく動作しますが、JSFUnit を使用してアプリケーションをテストしようとすると、サーブレットの ejb 参照が挿入されず、null になります。

EntryServlet は、jsf ページで必要なデータをロードするため、JSF セッションを設定する前に EntryServlet を呼び出す必要があります。私はそれを次のように呼んでいます

JSFUnit テスト コード

public class VisitingScholarNewRequestTest extends org.apache.cactus.ServletTestCase {

public static Test suite() {
   return new TestSuite( VisitingScholarNewRequestTest.class );
}



public void testSaveAsDraft() throws ServletException,IOException {
    //Calling EntryServlet
    JSFUnitEntryServlet entryServlet = new JSFUnitEntryServlet();
    request.setAttribute("netid","KS2316");
    entryServlet.doPost(request,response); -- this is giving an error.
    // Send an HTTP request for the initial page
    JSFSession jsfSession = new JSFSession("/faces/cardrequestcreate.xhtml");

    // A JSFClientSession emulates the browser and lets you test HTML
    JSFClientSession client = jsfSession.getJSFClientSession();

    // A JSFServerSession gives you access to JSF state      
    JSFServerSession server = jsfSession.getJSFServerSession();

    System.out.println("current view id :"+server.getCurrentViewID());

    // Test navigation to initial viewID
    assertEquals("/cardrequestcreate.xhtml", server.getCurrentViewID());

}

EntryServlet コード

public class JSFUnitEntryServlet extends HttpServlet { @EJB private MasterDataLocal masterDataFacade;

public void doGet(HttpServletRequest request,
                  HttpServletResponse response) throws ServletException,
                                                       IOException {
    doPost(request,response);
}

public void doPost(HttpServletRequest request,
                   HttpServletResponse response) throws ServletException,
                                                        IOException {
    String netId = "";
    try {
        netId = (String)request.getAttribute("netid");
        //Establish the portal connection for this user
        masterDataFacade.reinstateUser(netId); -- The test is failing with a null pointer exception here.

前述したように、ブラウザでアプリケーションを実行すると問題なく動作し、EJB が EntryServlet に注入されますが、JSFUnit テスト スイートを実行すると、EJB は注入されません。何らかの理由で、サーブレットがコンテナーで実行されていません。この点で助けてください.どんな助けでも大歓迎です

よろしくキラン

4

1 に答える 1

1

を使用しnewてサーブレットを作成しています:

//Calling EntryServlet
JSFUnitEntryServlet entryServlet = new JSFUnitEntryServlet();

ここではサーブレットが管理されていない (つまり、コンテナーによって作成されている) ため、インジェクションがどのように発生するかわかりません。

于 2010-11-08T11:57:45.293 に答える