私のアプリケーションには、デフォルトのデータをロードし、ログインしたユーザー 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 は注入されません。何らかの理由で、サーブレットがコンテナーで実行されていません。この点で助けてください.どんな助けでも大歓迎です
よろしくキラン