Ваш макет не подобран контекстом приложения (теста). Таким образом, даже если вы имитируете свой сервис и внедряете его в экземпляр вашего контроллера в вашем тесте, этот экземпляр контроллера не является экземпляром, который будет использоваться контекстом приложения, когда вы запускаете запрос против вашего (тестового) приложения.
Вместо использования @Mock и @InjectMocks создайте класс TestConfiguration и используйте вместо него @MockBean для ServiceImpl. Удалите контроллер из теста все вместе, так как вам не нужно взаимодействовать с ним. Итак, что-то вроде:
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@Import(MemberControllerTestConfiguration.class)
class MemberControllerTest {
@Autowired
MemberService memberService;
@Autowired
private TestRestTemplate restTemplate;
//rest of your test
}
@TestConfiguration
class MemberControllerTestConfiguration{
@MockBean
MemberService memberService;
}
Я обычно склоняюсь к тому, чтобы сохранить эту конфигурацию теста внизу одного и того же файла теста, чтобы сохранить их вместе, поскольку это только то, что будет использоваться в этом тесте. Возможно, вам придется аннотировать помеченный компонент с помощью @Primary, если он начинает жаловаться на слишком много компонентов