package com.github.ebnew.ki4so.core.service; import junit.framework.Assert; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import com.github.ebnew.ki4so.core.authentication.Authentication; import com.github.ebnew.ki4so.core.authentication.AuthenticationManager; import com.github.ebnew.ki4so.core.authentication.Credential; import com.github.ebnew.ki4so.core.exception.InvalidCredentialException; public class Ki4soServiceTest { private Ki4soServiceImpl ki4soService; @Before public void setUp() throws Exception { ki4soService = new Ki4soServiceImpl(); } @After public void tearDown() throws Exception { ki4soService = null; } @Test public void testLogin(){ //测试输入Null的情况。 Assert.assertNull(ki4soService.login(null)); //测试认证失败的情况。 Credential credential = Mockito.mock(Credential.class); //当调用认证方法则抛出异常信息。模拟测试数据。 AuthenticationManager authenticationManager = Mockito.mock(AuthenticationManager.class); this.ki4soService.setAuthenticationManager(authenticationManager); InvalidCredentialException exception = Mockito.mock(InvalidCredentialException.class); String code = "message code"; String msgKey ="message key"; Mockito.when(exception.getCode()).thenReturn(code); Mockito.when(exception.getMsgKey()).thenReturn(msgKey); Mockito.when(authenticationManager.authenticate(credential)).thenThrow(exception); LoginResult loginResult = ki4soService.login(credential); LoginResult expected = new LoginResult(); expected.setSuccess(false); expected.setCode(code); expected.setMsgKey(msgKey); //比较结果。 this.assertLoginResult(expected, loginResult); //测试认证成功。 credential = Mockito.mock(Credential.class); //当调用认证方法则抛出异常信息。模拟测试数据。 authenticationManager = Mockito.mock(AuthenticationManager.class); this.ki4soService.setAuthenticationManager(authenticationManager); Authentication authentication = Mockito.mock(Authentication.class); Mockito.when(exception.getCode()).thenReturn(msgKey); Mockito.when(exception.getCode()).thenReturn(code); Mockito.when(authenticationManager.authenticate(credential)).thenReturn(authentication); loginResult = ki4soService.login(credential); expected = new LoginResult(); expected.setSuccess(true); expected.setAuthentication(authentication); //比较结果。 this.assertLoginResult(expected, loginResult); } /** * 测试登出的情况。 */ @Test public void testLogout(){ } /** * 比较两个登录结果对象。 * @param expected 预期结果。 * @param aucual 实际结果。 */ private void assertLoginResult(LoginResult expected, LoginResult aucual){ if(expected==null && aucual==null){ return; } else if(expected != null && aucual!=null){ Assert.assertEquals(expected.getCode(), aucual.getCode()); Assert.assertEquals(expected.getMsgKey(), aucual.getMsgKey()); Assert.assertEquals(expected.getAuthentication(), aucual.getAuthentication()); } else{ Assert.fail("预期和实际登录对象不等"); } } }