Доступ к атрибутам сеанса вызывает ошибку 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)
...
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.