Проблема JSFUnit - EJB не вводится в тестируемый сервлет - PullRequest
1 голос
/ 03 ноября 2010

В моем приложении у меня есть EntryServlet, который загружает данные по умолчанию и устанавливает безопасность на основе зарегистрированного идентификатора пользователя. Этот сервлет использует EJB через внедрение зависимостей. Он работает нормально, когда я выполняю его как обычное веб-приложение, но когда я пытаюсь протестировать приложение с помощью JSFUnit, ссылка на ejb в сервлете не вводится и является нулевой.

Мне нужно вызвать EntryServlet перед установкой сеанса JSF, так как он загружает данные, необходимые на страницах jsf. Я называю это следующим образом

JSFUnit тестовый код

открытый класс VisitingScholarNewRequestTest расширяет 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

открытый класс JSFUnitEntryServlet extends HttpServlet { @EJB частный 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. По какой-то причине сервлет не выполняется в контейнере. Пожалуйста, помогите в этом отношении. Любая помощь будет принята с благодарностью

С уважением Киран

1 Ответ

1 голос
/ 08 ноября 2010

Вы используете new для создания своего сервлета:

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

Я не понимаю, как может произойти внедрение, поскольку сервлет не управляется (т. Е. Создается контейнером).

...