下面的类使用,我想在它上编写一个单元测试。
@AllArgsConstructor
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private AuthenticationManager authenticationManager;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests(arc -> arc
.antMatchers("/**").authenticated()
)
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf(AbstractHttpConfigurer::disable)
.oauth2ResourceServer(rsc ->
rsc.opaqueToken(
(OAuth2ResourceServerConfigurer<HttpSecurity>.OpaqueTokenConfigurer configurer) ->
configurer.authenticationManager(authenticationManager)
)
);
}
}我试图用Mockito编写一个单元测试。
@ExtendWith(MockitoExtension.class)
class SecurityConfigurationTest {
@Mock private HttpSecurity httpSecurity;
@Mock private SessionManagementConfigurer<HttpSecurity> sessionManagementConfigurer;
@InjectMocks
private SecurityConfiguration securityConfiguration;
@Test
void testConfigure() throws Exception {
when(httpSecurity.authorizeRequests(any(Customizer.class))).thenReturn(httpSecurity);
when(httpSecurity.sessionManagement()).thenReturn(sessionManagementConfigurer);
when(sessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.thenReturn(sessionManagementConfigurer);
when(sessionManagementConfigurer.and()).thenReturn(httpSecurity);
when(httpSecurity.csrf(any(Customizer.class))).thenReturn(httpSecurity);
when(httpSecurity.oauth2ResourceServer(any(Customizer.class))).thenReturn(httpSecurity);
securityConfiguration.configure(httpSecurity);
verify(httpSecurity, times(1)).authorizeRequests(any(Customizer.class));
verify(httpSecurity, times(1)).sessionManagement();
verify(sessionManagementConfigurer, times(1))
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
verify(sessionManagementConfigurer, times(1)).and();
verify(httpSecurity, times(1)).csrf(any(Customizer.class));
verify(httpSecurity, times(1)).oauth2ResourceServer(any(Customizer.class));
}
}但是,当我运行单元测试时,我发现并不是所有代码行都包括在内:

如何获得100%的保险?
发布于 2022-07-18 18:04:27
你的问题不在于Lambda的表达!你的问题是你在嘲笑
when(httpSecurity.authorizeRequests(any(Customizer.class))).thenReturn(httpSecurity);和
when(httpSecurity.oauth2ResourceServer(any(Customizer.class))).thenReturn(httpSecurity); 这些模拟使得您的类中的代码不被执行,因为它们是被模仿的。通过删除这两行,您应该可以看到您的行已经覆盖(或者在开头得到了一个错误:)。
https://stackoverflow.com/questions/73024806
复制相似问题