我想测试一个调用具有TokenStore依赖项的Static方法的类
当我运行测试TokenStore时会抛出空指针异常
如何避免引发空指针异常
@Component
public class TokenUtil {
private static TokenStore tokenStore;
@Autowired
public TokenUtil(TokenStore tokenStore) {
TokenUtil.tokenStore = tokenStore;
}
public static OAuth2AccessToken getAccessToken() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object details = authentication.getDetails();
OAuth2AccessToken accessToken = null;
if (details instanceof OAuth2AuthenticationDetails) {
OAuth2AuthenticationDetails oAuth2AuthenticationDetails = (OAuth2AuthenticationDetails) details;
String decodedDetails = oAuth2AuthenticationDetails.getTokenValue();
accessToken = tokenStore.readAccessToken(decodedDetails);
}
return accessToken;
}
}
下面是我的测试代码
@Test
public void name() {
Set<String> scopes = new HashSet<>();
scopes.add("admin");
OAuth2AccessToken oAuth2AccessToken = mock(OAuth2AccessToken.class);
when(oAuth2AccessToken.getScope()).thenReturn(scopes);
Authentication auth = mock(Authentication.class);
SecurityContext secCont = mock(SecurityContext.class);
TokenStore tokenStore = mock(TokenStore.class);
OAuth2AuthenticationDetails oAuth2AuthenticationDetails = mock(OAuth2AuthenticationDetails.class);
when(secCont.getAuthentication()).thenReturn(auth);
SecurityContextHolder.setContext(secCont);
when(auth.getDetails()).thenReturn(oAuth2AuthenticationDetails);
when(oAuth2AuthenticationDetails.getTokenValue()).thenReturn("test");
when(tokenStore.readAccessToken(anyString())).thenReturn(oAuth2AccessToken);
TokenUtil.getAccessToken();
}