Witam mam problem z testowaniem REST API przy użyciu MOCKITO
Mam przykładowy kod rest controller:
@RestController
@RequestMapping(path = "api/workers")
public class WorkOfferController {
@Autowired
private WorkerService workerService;
@PostMapping(value = "/lists", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity searchWorker(@RequestBody RecruitmentSearchRequest recruitmentSearchRequest, @RequestParam("page") int page, @RequestParam("size") int size,) throws NoSuchFieldException {
System.err.print('WorkerController');
return workerService.getWorkers(recruitmentSearchRequest, page, size);
}
}
Oraz odpowiedni do niego serwis:
@Service
@Transactional
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class WorkerService {
private final WorkerRepistory workerRepository;
private final UserRepository userRepository;
public ResponseEntity getWorkers(RecruitmentSearchRequest recruitmentSearchRequest,int pageNumber, int size) throws NoSuchFieldException {
System.err.print('WorkerService');
...
}
}
I chce przetestować czy pod przeJsciem pod taki url z odpowiednimi danymi wszystko jest okej. Nie chce używać do tego bazy danych dlatego wole Mockito.
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = Appp2workApplication.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class PharmacyWorkOfferRestDocsTests {
private MockMvc mockMvc;
@InjectMocks
private WorkOfferController workOfferController;
@Mock
private WorkerService workerService;
@Mock
UserRepository userRepository;
@Mock
WorkerRepistory workerRepository;
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.standaloneSetup(workOfferController).build();
}
@Test
public void searchWorkOfferListWithParameters() throws Exception {
String payload = "{\n" +
"\t\"name\":\"tomek\",\n" +
"\t\"searchFromSalary\":5,\n" +
"}";
Mockito.doNothing().when(userRepository.save(Mockito.anyObject()));
this.mockMvc.perform(post("/api/workers/lists?page=0&size=20").contentType(MediaType.APPLICATION_JSON).content(payload))
.andExpect(status().isOk());
}
}
I mam problem że z takim podejsciem test wchodzi mi do controller i wyświetla "WorkerController" ale już z tego controllera nie chce wejść mi do serwisu i niby zwraca 200 ale tak naprawdę wszedł tylko do controllera i tyle . Jest to spowodowane zapewne dlatego że WorkerService jest jako Mock ale probówałem go dać jako np. Autowired albo InjectMock i jest ciągle to samo .
Co robię nie tak że wchodzi mi do controllera ale z tego controllera do odpowiedniego serwisu już nie chce ?