Я пытаюсь протестировать контроллер с помощью @WithUserDetails, поэтому я могу использовать принципала аутентификации, но когда я это делаю, ему не удается создать контекст безопасности, я настроил свои тесты следующим образом
@RunWith(SpringRunner.class)
@WebMvcTest(BasketController.class)
@ContextConfiguration(classes = { BasketController.class, ProductService.class, UserDetailsServiceImpl.class,
SecurityConfig.class })
public class BasketControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private ProductService productService;
@MockBean
private UserDetailsServiceImpl userService;
@MockBean
private Authentication auth;
private Set<Authority> authorities;
private User user;
private Basket basket;
private BasketItem basketItem;
private List<BasketItem> basketList;
@Before
public void Setup() {
userService = new UserDetailsServiceImpl();
this.authorities = new HashSet<>();
this.authorities.add(new Authority(1L, Role.ROLE_EMPLOYEE));
basket = new Basket();
this.basketList = new ArrayList<BasketItem>();
byte[] image = new byte[1];
image[0] = 'a';
basketList.add(new BasketItem(1L, 2,
new Product(1L, "product", "productDescription", "productCategory", image, new BigDecimal(1.00), 1)));
basket.setBasket(basketList);
user = new User(1L, "testUser", "testPassword", basket, authorities);
when(userService.loadUserByUsername("testUser")).thenReturn(user);
when(auth.getPrincipal()).thenReturn(user);
}
@Test
@WithUserDetails(value = "userService", userDetailsServiceBeanName = "userService")
public void testThatBasketPageReturnsBasketPage() throws Exception {
mockMvc.perform(get("/basket")).andExpect(status().isOk()).andExpect(view().name("basket"));
}
}
и мой UserDetailsService имеет квалификатор userService, я не уверен, что я делаю не так, поскольку имя служебного компонента совпадает с моим фактическим сервисом.