Как макетировать класс внутри другого класса, который тестируется? - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь написать интеграционный тест для аутентификации в 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 голосов
/ 23 ноября 2018

Вам действительно нужно издеваться над ним с помощью Mockito?Используйте преимущества пружинных профилей и аннотации @Profile, чтобы отличить реализацию интерфейса AuthService для test и других сред.

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

    // ... the mock implementation
}
...