首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mockito和Lambda表达式

使用Mockito和Lambda表达式
EN

Stack Overflow用户
提问于 2022-07-18 15:25:20
回答 1查看 151关注 0票数 1

下面的类使用,我想在它上编写一个单元测试。

代码语言:javascript
复制
@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编写一个单元测试。

代码语言:javascript
复制
@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%的保险?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-18 18:04:27

你的问题不在于Lambda的表达!你的问题是你在嘲笑

代码语言:javascript
复制
when(httpSecurity.authorizeRequests(any(Customizer.class))).thenReturn(httpSecurity);

代码语言:javascript
复制
when(httpSecurity.oauth2ResourceServer(any(Customizer.class))).thenReturn(httpSecurity); 

这些模拟使得您的类中的代码不被执行,因为它们是被模仿的。通过删除这两行,您应该可以看到您的行已经覆盖(或者在开头得到了一个错误:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73024806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档