Important Notice - Forums is archived
To simplify things and help our users to be more productive, we have archived the current forum and focus our efforts on helping developers on Stack Overflow. You can post new questions on Stack Overflow or join our Discord channel.

Vaadin lets you build secure, UX-first PWAs entirely in Java.
Free ebook & tutorial.
NullPointerException in Page.getCurrent()
Hi all,
I am wirting junit test case. I used mokito to set the current session even i set current session i am getting null pointer exception in below line.
Page.getCurrent().setTitle("My Project");
Below code is juint test case:
public class UserListViewTest extends AbstractComponent{
private static final long serialVersionUID = 1L;
UI userListViewTest;
UserListView userListView;
ViewChangeEvent event;
VaadinSession session;
public static VaadinSession session1;
UserListTable userListTable;
VaadinService vaadinService;
MyVaadinServlet mymockServlet;
MyVaadinServletService mockService;
ServletConfig mockServletConfig;
HttpSession mockHttpSession;
WrappedSession mockWrappedSession;
Lock httpSessionLock;
VaadinRequest request;
VaadinResponse response;
User user;
private JPAContainer<User> container;
public static UI ui,uI;
@SuppressWarnings("deprecation")
@Before
public void setUp() throws Exception {
//Mockito.when(UI.getCurrent()).thenReturn(Mockito.mock(UI.class));
request=org.mockito.Mockito.mock(VaadinRequest.class);
response=org.mockito.Mockito.mock(VaadinResponse.class);
vaadinService=org.mockito.Mockito.mock(VaadinService.class);
vaadinService.setCurrentInstances(request, response);
vaadinService.setCurrent(vaadinService);
session = org.mockito.Mockito.mock(VaadinSession.class);
session1=org.powermock.api.mockito.PowerMockito.mock(VaadinSession.class);
PowerMockito.mockStatic(UI.class);
ui=org.powermock.api.mockito.PowerMockito.mock(UI.class);
uI=org.powermock.api.mockito.PowerMockito.mock(UI.class);
httpSessionLock = new ReentrantLock();
mockServletConfig = new MockServletConfig();
mymockServlet = new MyVaadinServlet();
mymockServlet.init(mockServletConfig);
mockService = mymockServlet.getService();
mockHttpSession = Mockito.mock(HttpSession.class);
mockWrappedSession = new WrappedHttpSession(mockHttpSession) {
ReentrantLock lock = new ReentrantLock();
{
lock.lock();
}
@Override
public Object getAttribute(String name) {
Object res;
try {
Thread.sleep(100); // for deadlock testing
org.junit.Assert.assertTrue("Deadlock detected", httpSessionLock.tryLock(5, TimeUnit.SECONDS)); // simulates
String lockAttribute = mockService.getServiceName() + ".lock";
if (lockAttribute.equals(name)) {
res = lock;
} else if ("com.vaadin.server.VaadinSession.Mock Servlet".equals(name)) {
res = session;
} else {
res = super.getAttribute(name);
}
httpSessionLock.unlock();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return res;
}
};
session = new VaadinSession(mockService);
user= new User();
user.setuserId(4l);
user.setRole("ADMIN");
user.setUsername("admin");
user.setPassword("admin");
System.out.println("mockService = " + mockService);
System.out.println("mockWrappedSession = " + mockWrappedSession);
System.out.println("session = " + session);
session.storeInSession(mockService, mockWrappedSession);
session.setCurrent(session);
session.setAttribute("loginurl", "loginurl");
String loginurl = "www.google.com";
session.getCurrent().setAttribute("userobj", user);
}
@After
public void tearDown() throws Exception {
}
@Test
public void testEnter() {
userListTable=new UserListTable();
PersistenceUtil.createEntityManager();
container = JPAContainerFactory.make(User.class, PersistenceUtil.getEntityManager());
userListTable.createTable();
//page=org.mockito.Mockito.mock(Page.class);
event=org.mockito.Mockito.mock(ViewChangeEvent.class);
//setCurrent(ui.getSession());
ui.setSession(org.powermock.api.mockito.PowerMockito.mock(VaadinSession.class));
ui.setCurrent(org.powermock.api.mockito.PowerMockito.mock(UI.class));
//ui.setSession(ui.getSession());
ui.getCurrent().setSession(org.powermock.api.mockito.PowerMockito.mock(VaadinSession.class));
//ui.setCurrent(s);
UI.setCurrent(ui);
//ui.setParent(uI);
System.out.println("Ui get current "+ ui.getCurrent());
System.out.println("Ui get session "+ui.getSession());
System.out.println("Ui get page "+ui.getPage());
System.out.println("Page current "+Page.getCurrent());
userListView = new UserListView();
userListView.enter(event);
}
}
i this what im getting in console
Ui get current uI
Ui get session null
Ui get page null
Page current null
session.getSession = vaadin sessioncom.com.mypoject.views.ListViewTest$1@1387e9b2
Please give some suggestion to me to clear this error Thanks a lot in advance.
A bit hard to follow the code, because of the formatting, but it seems you are mocking the UI class, but you are not mocking the UI.getCurrent() or UI.getPage() so those will return null.
Johannes Häyry: A bit hard to follow the code, because of the formatting, but it seems you are mocking the UI class, but you are not mocking the UI.getCurrent() or UI.getPage() so those will return null.
Hi Johannes,
Really sorry for the code format please apoloigies me and thanks a lot for the reply. I remove all unnecessary code and i attached the simple code.
what you said is exactly correct.
when i debug i found that currentUI.getPage() function is throwing null.
how to mocking the currentUI.getPage(). please send any link or some syntax that would help me solve this
Thanks in advance.....
I don't claim to be an expert in using mock frameworks, but to me it seems you are mocking static methods and then expecting them to return the same things as the real implementation. See PowerMockito.mockStatic and your usage of UI.getCurrent() and UI.setCurrent().