Как издеваться над классом внутри другого тестируемого класса?

Я пытаюсь написать интеграционный тест для аутентификации с помощью 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.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

    // ... the mock implementation
}

У него есть только один метод, который возвращает true или false, поэтому я подумал, что имитировать это будет проще, но, делая это с профилями, будет легче добавлять его в каждый тест.

user2452483 23.11.2018 13:53

@ user2452483: Да, с помощью этого подхода вы можете контролировать больше реализаций (в отношении данных в памяти, в отношении базы данных разработчиков или другой ...). Я считаю, что этот способ легче тестировать, и в основном вы сосредотачиваетесь на самом тестировании, чем на насмешках.

Nikolas Charalambidis 23.11.2018 15:15

Другие вопросы по теме