@MockBeans
это просто повторяемая аннотация для умножения @MockBean
с. Если вам нужно повторно использовать этот смоделированный bean-компонент, вы можете добавить его в класс / config. Но вам нужно использовать @Autowired
для сервисов, которые вам над чем издеваться. Так что в вашем случае это должно быть:
.....
@MockBeans({@MockBean(ShoppingService.class), MockBean(ShopRepository.class)})
public class PurchaseControllerTest {
@Autowired
ShoppingService shoppingService;
@Autowired
ShopRepository shopRepository;
.....
}
Основная идея @MockBeans
это просто повторение @MockBean
в одном месте. Для меня это может быть полезно только для некоторой конфигурации / общего класса, который вы можете использовать повторно.
@MockBean
- создать макет, @Autowired
- это бин с автосвязью из контекста, в вашем случае он помечает / создает бин как смоделированный, после чего имитированный бин будет внедрен в ваше поле с автопроводкой.
Так что, если у вас есть много полей с автоматическим связыванием с @MockBeans
(или умножить @MockBean
), вы можете настроить, если это макет или нет в одном месте (в @MockBeans
для уровня класса), и вам не нужно замените @Autowired
на @Mock
в своем тестовом классе (как в случае, если вы удалите @MockBeans
, все немодифицированные bean-компоненты будут автоматически подключены как bean-компоненты из контекста, и если вы отмените удаление, вы будете работать в mocked bean-компонентах ( что вы настроили внутри этой аннотации)).
Если вы хотите избежать большой зависимости внутри одного класса, вы можете извлечь всю зависимость в некоторый родительский класс, но поскольку java не поддерживает множественное наследование для класса, это не всегда может помочь.