У меня есть модель
public class Student {
private String name;
// getter and setter
}
Я реализовал контроллер REST, который генерирует объект ученика со случайными символами в качестве имени. У меня есть @RestController, связывание со слоем @Service, который обслуживает объект ученика, и снова слой @Service, который генерирует случайные строки. Я хочу протестировать свое приложение, используя JUnit, высмеивая мой контроллер и сервисы. Проблема в том, что я могу смоделировать свой контроллер и сервис, который обслуживает студента, но слой сервиса stringGeneratorService не имитируется.
Мой контроллер
@RestController
public class StudentServer {
StudentService service;
@Autowired
public StudentServer(StudentService service) {
this.service = service;
}
@GetMapping("/generate-student")
public Student studentGenerator() {
return service.getRandomStudent();
}
}
Мой уровень сервиса, который обслуживает объект студента
@Service("studentService")
public class StudentService {
StringGeneratorService stringService;
@Autowired
public StudentService(StringGeneratorService stringService) {
this.stringService = stringService;
}
public Student getRandomStudent() {
Student student = new Student();
student.setName(stringService.generateRandomAlphaString());
return student;
}
}
И мой сервис RandomStringGenertor
@Service("stringGeneratorService")
public class StringGeneratorService {
Random random = new Random();
public String generateRandomAlphaNumericString() {
// returns a randomly generated string
}
}
Мой тестовый класс JUnit выглядит следующим образом:
@RunWith(SpringRunner.class)
@WebMvcTest(StudentServer.class)
public class RestTest {
@Autowired
private MockMvc mockMvc;
@TestConfiguration
public static class TestConfig {
@Bean
public StudentService studentService(final StringGeneratorService stringGeneratorService){
return new StudentService(stringGeneratorService);
}
@Bean
public StringGeneratorService stringGeneratorService(){
return mock(StringGeneratorService.class);
}
}
@Autowired
private StudentService studentService;
@Autowired
public StringGeneratorService stringGeneratorService;
@Before
public void setUp() {
reset(stringGeneratorService);
}
@After
public void tearDown() {
verifyNoMoreInteractions(stringGeneratorService);
}
@Test
public void testGenerateStudent() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/generate-student"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(print())
.andExpect(MockMvcResultMatchers.jsonPath("$.name").isNotEmpty());
}
}
В результате Body = {"name": null}
Может кто-нибудь иметь представление, что я делаю не так?