如何在另一个正在测试的类中模拟类?

时间:2018-11-23 11:21:15

标签: java spring spring-mvc spring-security mocking

我正在尝试编写一个用于通过Spring Security和JWT进行身份验证的集成测试。我的问题是,在身份验证过滤器的身份验证过程中,它检查用户在外部系统中是否有效。我该如何模拟在测试过程中调用外部系统的类?

这是一个安全配置:

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    private final AuthService authService;

    public WebSecurityConfig(AuthService authService) {
        this.authService = authService;
    } 

    @Bean
    public AuthentificationTokenFilter authenticationTokenFilter() {
        return new AuthentificationTokenFilter(authService);
    }


    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    }
}

我需要在AuthService内部模拟AuthentificationTokenFilter,在该地方实际进行身份验证,但是我没有直接与其进行交互和安全配置。我仅尝试向RestController发出休息请求,如果身份验证正确,则此请求应返回200代码。

1 个答案:

答案 0 :(得分:1)

您真的需要使用Mockito对其进行模拟吗?利用Spring profiles和注释@Profile的优势来区分AuthService和其他环境的test接口实现。

@Service
@Profile("test")
public class MockAuthService implements AuthService {

    // ... the mock implementation
}