Я новичок в тестировании Spring и Mockito. Я не смог найти ответ на свою проблему в stackoverflow.Spring + Mockito injection не работает
У меня есть следующие классы:
@EnableScheduling
@Service
public class ServiceEx {
private Queue<Object> tasks = new ConcurrentLinkedQueue();
public void addItem(Object task) {
tasks.add(task);
}
@Scheduled(fixedRate = 30000)
public void executePendingTask() {
tasks.remove();
}
public void drop() {
tasks.clear();
}
public boolean isEmpty() {
return tasks.isEmpty();
}
}
@Controller
@RequestMapping("/drop")
public class ControllerEx {
private ServiceEx service;
@Inject
public ControllerEx(ServiceEx service) {
this.service = service;
}
@RequestMapping(method = RequestMethod.GET)
public String dropTasks(Model model) {
service.drop();
return "redirect:/home";
}
}
И мой класс тестирования выглядит следующим образом:
public class ControllerTest {
@Inject
private ServiceEx service;
@InjectMocks
private ControllerEx controller;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void test() {
service.add(task1);
service.add(task2);
this.mockMvc.perform(get("/drop")).andExpect(status().is3xxRedirection());
assertTrue(service.isEmpty());
}
}
Моя проблема заключается в том, что сервис является недействительным как в ControlleEx и ControllerTest и я не хочу издеваться над ним. Я попробовал несколько аннотаций, но не нашел, какой из них использовать.
Что я сделал не так?
Ничего не загрузите ваши услуги. У вас нет издевательств в вашем тесте, поэтому нечего насмехаться. Поэтому не уверен, почему вы даже используете Mockito здесь. –
Да, это упрощенный пример моего настоящего класса, я издеваюсь над другими классами. Выделенные классы успешно созданы, но услуг нет. –
Как я уже сказал в вашем тестовом классе, я не вижу ничего связанного с Spring, поэтому не уверен, как он должен создавать классы. Он также не будет вводить насмешки в контроллер, так как контроллера не будет. Можете ли вы изменить свое сообщение, чтобы лучше отразить ваше дело, как в настоящий момент это не так. –