当前位置: 首页 > 知识库问答 >
问题:

使用WicketTester时,访问会话属性会引发NullPointerException错误

丌官远
2023-03-14

使用WicketTester时,访问会话的属性会引发NullPointerException错误。

wicket 9之前也有类似的问题:单元测试mockito httpSession

讨论建议使用

测试员。getRequest()。getSession()。setAttribute(“用户名”、“测试用户1”);

而不是

测试员。getHttpSession()。setAttribute(“用户名”、“测试用户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)

......

共有1个答案

洪浩
2023-03-14
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会话(org.apache.Wicket.Session)和HttpSession。在测试中,您在HttpSession上设置了该属性,而在UserPage中,您试图从Wicket会话读取该属性。

 类似资料:
  • 我有一个使用servlet会话属性显示div的问题 我有一个“result.jsp”页面。在jsp中,我有一个“生成URL”链接、一个空的输入文本字段和一个“addThis”div。链接“生成URL”调用jquery ajax方法“utilComp()”,它调用一个设置会话属性“saveLink”、返回一个值并填充空文本字段的servlet。 如果属性会话“saveLink”为空(因为尚未单击生成

  • 我正在Codeigniter中创建API。在这个API中,我为用户提供了一个登录函数。如果登录成功,我将在CI会话中设置用户数据,并将会话返回给用户。 现在,用户可以使用该会话ID来验证他自己的所有其他请求,如添加/更新/删除。基本上,我希望当用户发送下一个请求时,我可以根据他的会话ID验证他的凭据。 客户请求代码: 上面是一个从客户端到服务器的登录请求示例。在服务器端,服务器验证客户端提供的凭据

  • 问题内容: 如何获得服务器上所有活动的PHP会话的列表并从一个用户实例中访问它们? 激励的情况是显示站点上所有当前活动用户的列表,用户名存储在每个用户的PHP会话中。 注意:我知道我可以通过数据库(甚至文件系统)创建自己的状态,但是我正在寻找一种利用内置PHP会话机制的方法。 问题答案: 看到响应,尽管有可能,但这并不意味着您 应该 这样做。会话的存储格式没有记录,并且可能随时更改(即使在次要版本

  • 问题内容: 我已经使用JSF和PrimeFaces实现了一个登录表单。我在PrimeFaces展示网站上使用了此示例。 我有一个Facelets页面来显示dataTable。现在,我需要将上面的登录表单与此表格页面集成在一起。因此,我在LoginBean.java中添加了几行内容来处理会话属性。 如果用户未登录,我需要在dataTable中隐藏一列。现在我的问题是,如何访问Facelets页面内的

  • 问题内容: 是否可以从EntityManager中获取Hibernate Session对象?我想访问一些hibernate特定的API … 我已经尝试过类似的东西: 但是,一旦我在EJB中调用方法,我就会收到带有NullPointerException的“在EJB上调用期间发生系统异常” 我用玻璃鱼3.0.1 问题答案: Bozho和partenon是正确的,但是: 在JPA 2中,首选机制是e

  • 问题内容: 如何以一种优雅的方式通过id获取任何HTTP会话或Web应用程序(Java 2 EE)中当前所有活动的HTTP会话? 当前,我有一个会话,一旦创建,便将其放入,一切正常,我可以随时通过会话ID从该映射中检索HTTP会话,但是看起来对象将永远不会完成……即使会话使该映射无效仍然引用无效的会话对象…我也已经阅读了这篇文章,在我看来,这是不可接受的… 换句话说,我需要一种可能性来查看任何Ht