Доступ к атрибутам сеанса вызывает ошибку NullPointerException при использовании WicketTester

Доступ к атрибутам сеанса вызывает ошибку NullPointerException при использовании WicketTester.

Ранее был подобный вопрос калитка 9: модульное тестирование + mockito + httpSession

В обсуждении они предложили использовать

tester.getRequest().getSession().setAttribute("userName", "Тестовый пользователь 1");

вместо

tester.getHttpSession().setAttribute("userName", "Тестовый пользователь 1");

Внесение этого изменения не решило проблему. Полный проект, созданный с использованием wicket.apache.org/start/quickstart.html, можно найти на github.com/rjngshn/WicketTesterSession.

    public class TestHomePage
{
    private WicketTester tester;

    @BeforeEach
    public void setUp()
    {
        tester = new WicketTester(new RTApplication());
    }
// https://stackoverflow.com/questions/70258881/wicket-9-unit-testing-mockito-httpsession
    @Test
    public void userPageRendersSuccessfully()
    {
        System.out.println("Testing userPageRendersSuccessfully ");
        tester.getRequest().getSession().setAttribute("userName", "Test user 1");
        System.out.println("Uesr name in session:" + tester.getHttpSession().getAttribute("userName"));
        //start and render the test page
        tester.startPage(UserPage.class);
        //assert rendered page class
        tester.assertRenderedPage(UserPage.class);
        tester.assertModelValue("txtUserName", "Test user 1");
        System.out.println("Complete testing userPageRendersSuccessfully ");
    }
}

Ошибка:

 [WARN] [stderr] java.lang.NullPointerException
 [WARN] [stderr]    at uk.ac.ox.ndph.ckb.UserPage.onInitialize(UserPage.java:19)
 [WARN] [stderr]    at org.apache.wicket.Component.fireInitialize(Component.java:883)
 [WARN] [stderr]    at org.apache.wicket.MarkupContainer.internalInitialize(MarkupContainer.java:1045)

...

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
diff --git ResearchTracker/src/test/java/uk/ac/ox/ndph/ckb/TestHomePage.java ResearchTracker/src/test/java/uk/ac/ox/ndph/ckb/TestHomePage.java
index 757269f..a9df941 100644
--- ResearchTracker/src/test/java/uk/ac/ox/ndph/ckb/TestHomePage.java
+++ ResearchTracker/src/test/java/uk/ac/ox/ndph/ckb/TestHomePage.java
@@ -21,8 +21,8 @@ public class TestHomePage
     public void userPageRendersSuccessfully()
     {
         System.out.println("Testing userPageRendersSuccessfully ");
-        tester.getRequest().getSession().setAttribute("userName", "Test user 1");
-        System.out.println("Uesr name in session:" + tester.getHttpSession().getAttribute("userName"));
+        tester.getSession().setAttribute("userName", "Test user 1");
+        System.out.println("Uesr name in session:" + tester.getSession().getAttribute("userName"));
         //start and render the test page
         tester.startPage(UserPage.class);
         //assert rendered page class

Кажется, вы путаете Wicket Session (org.apache.wicket.Session) с HttpSession. В тесте вы установили атрибут в HttpSession, а в UserPage вы попытались прочитать его из сеанса Wicket.

Большое тебе спасибо. Теперь я изменил проект, и он работает правильно. Код рабочего проекта можно найти на github.com/rjngshn/WicketTesterSession.

Rajani Sohoni 31.03.2022 14:41

Другие вопросы по теме