Задать вопрос
@avgona_pl

Mocking and Testings — почему падает Null в двух тестах?

Всем привет, столкнулся с такой проблемой, когда запускают приложение всё хорошо и отлично работает, но в тоже время когда пытаюсь сделать тесты - падает ошибка мол падаю null в проверке создания токена и проверки url на регистрацию.
Помимо кода ниже, в пропертях так же установлен флаг server.servlet.contextPath=/api
@AutoConfigureWebMvc
@WebMvcTest(AuthController.class)
@ExtendWith(SpringExtension.class)
class AuthControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    @Qualifier("userDetailsServiceImpl")
    private UserDetailsService userDetailsService;
    @MockBean
    private JwtUtil jwtUtil;
    @MockBean
    private JwtTokenFilter jwtTokenFilter;
    @MockBean
    private PasswordService passwordService;
    @MockBean
    private AuthenticationManager authenticationManager;
    @MockBean
    private UsersService userService;
    @MockBean
    private BCryptPasswordEncoder passwordEncoder;
    @MockBean
    private JwtAuthEntryPointJwt jwtAuthEntryPointJwt;

    private ObjectMapper objectMapper = new ObjectMapper();
    private RegistrationRequest registration = new RegistrationRequest();

    @Test
    void shouldNotBeNull() {
        Assert.notNull(mockMvc);
    }

    @Test
    void shouldCreateToken(){
        UserDetailsImpl userDetails = returnUserDetails();
        String token = jwtUtil.createToken("userDetails.getEmail()", Collections.singleton(new SimpleGrantedAuthority("ADMIN")));
        Assert.notNull(token);
    }<img src="https://habrastorage.org/webt/60/c0/82/60c082e769eb4809635868.png" alt="image"/><img src="https://habrastorage.org/webt/60/c0/83/60c08309eb06c424517440.png" alt="image"/>
    @Test
    void shouldRegisterUsers() throws Exception {
        User user = User.builder().username("User Userowski").email("user@gmail.com")
                .roles(Collections.singletonList(new Role("1", ERole.CUSTOMER)))
                .password("123").enabled(false).activationToken("123qwe").build();
        doNothing().when(userService).create(user);

        mockMvc.perform(post("/api/register")
                .content(objectMapper.writeValueAsBytes(registration))
                .contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk());


        verify(userService, times(1)).create(user);
    }

60c083a3aa48f685657885.png
60c083aba8395340846949.png
  • Вопрос задан
  • 506 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
В поля, анотированные @MockBean, инжектится мок, а не тот бин, который инжектится в приложении.
Поведение всех его методов нужно специально задавать.
Т.е. вы вызываете у мока метод .createToken(...) и получаете null
Используйте @Autowired аннотацию, если хотите получить оригинальный бин.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы