私は認証のためにJavaで認証を模擬しようとしています。私はmap.put()
方法で管理者を置く行に、SpringでのMocking認証:プロバイダのリストがNullPointerExceptionをスローする
MockitoAnnotations.initMocks(this);
mvc = MockMvcBuilders.standaloneSetup(this.controller).build();
final List<AuthenticationProvider> providers = mock(ArrayList.class);
final AbstractUserDetailsAuthenticationProvider provider = mock(
AbstractUserDetailsAuthenticationProvider.class);
when(provider.supports(any(Class.class))).thenReturn(false);
when(providers.size()).thenReturn(1);
session = new MockHttpSession();
when(providers.get(anyInt())).thenReturn(provider);
when(request.getSession()).thenReturn(session);
when(request.getSession(false)).thenReturn(session);
when(providers.iterator()).thenReturn(new Iterator<AuthenticationProvider>() {
private int currentIndex = 0;
@Override
public AuthenticationProvider next() {
return providers.get(currentIndex++);
}
@Override
public boolean hasNext() {
return currentIndex < providers.size() && providers.get(currentIndex) != null;
}
});
SingleProviderAuthenticationManager manager = new SingleProviderAuthenticationManager(providers);
Map<String, AuthenticationManager> map = new HashMap<String, AuthenticationManager>();
map.put("db", manager);
filter.setAuthenticationManagerMap(map);
when(request.getMethod()).thenReturn("POST");
when(request.getParameter("username")).thenReturn("admin");
when(request.getParameter("password")).thenReturn("admin");
List<User> users = new ArrayList<User>();
User user = new User();
user.setSourceSystem("db");
users.add(user);
when(userService.getUserReferenceByUsername("admin")).thenReturn(users);
auth = filter.attemptAuthentication(request, response);
、私は「デシベル」を入れたときに、それは実際にnull
としてプロバイダマネージャを与え、私が手に:これは、コードをあざけるための私のテストクラスですProviderManager
のNullPointerException
。私はそのはまだNullPointerException
を示すパスプロバイダと私のメインのコードで同じことをテストしてみたにもかかわらず
for (AuthenticationProvider provider : getProviders()) {
if (!provider.supports(toTest)) {
continue;
}
。 (復帰が起こる最後の行)
password = "";
}
username = username.trim();
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);
// Allow subclasses to set the "details" property
setDetails(request, authRequest);
return this.getAuthenticationManager().authenticate(authRequest);
}
私はここで立ち往生しています、両方のこれらの事を、私は彼らがすべてではありません渡すとき :私は、「LDAP」を入れた場合、代わりにそれは私にここUsernamePasswordAuthenticationFilter
でNullPointerException
を与えますnull
。どんな助け?