Testing question
frer May 13, 2008 4:03 PMHello,
I'm quite new with Seam and although I love what I'm seeing, I have a few questions concerning the tests.
First off, I am building a test application and in it I have a AuthenticationAction that calls a AuthenticationFacade. I call the action with this:
(AuthenticationFacade) Component.getInstance("authenticationFacade");
Now in my test case, I want to test that the AuthenticationAction works by calling the authenticationFacade (therefore it is a integration test since it tests more than merely a class). So far my test looks like this:
@Test public void unitTestAuthenticationOK() throws Exception { new ComponentTest() { protected void testComponents() throws Exception { AuthenticationAction authenticationAction = new AuthenticationAction(); Identity identity = new Identity(); identity.setUsername("admin"); identity.setPassword("admin"); setField(authenticationAction, "identity", identity); assert authenticationAction.authenticate(); } }.run(); }
And here is the code in the AuthenticationAction:
@In private Identity identity; public boolean authenticate() { try { LoginUser user = Component.getInstance("authenticationFacade").login(identity.getUsername(), identity.getPassword(), null); if(user != null) { for(LoginRole userRole: user.getLoginRoles()) { identity.addRole(userRole.getHumanReadableKey()); } for(LoginRole groupRole: user.getGroup().getRoles()) { identity.addRole(groupRole.getHumanReadableKey()); } } return true; } catch (SystemException e) { e.printStackTrace(); return false; } catch (LoginFailureException e) { e.printStackTrace(); return false; } }
I get a NullPointerException when the AuthenticationAction calls the Component.getInstance() method. I can understand it since I haven't told the test case where to look for the facade but I don't know how to do this.
More precisely my questions are:
1- How can I tell my test case that authenticationAction will call a authenticationFacade?
2- Am I using the correct way for a service to call another service by using Component.getInstance().
Thanks for your help,
François