У меня есть @RestController
, определенный для обновления класса Person
, как:
@RestController
@RequestMapping("/api/person")
class PersonRestController {
@Autowired
private IPersonService mPersonService;
@PostMapping("/update")
public Person updatePerson(@RequestBody Person person) {
Optional<Person> personIfExists = mPersonService.findOneIfExists(person.id);
if (!personIfExists.isPresent()) {
throw new IllegalArgumentException();
}
return mPersonService.update(personIfExists.get());
}
}
Для краткости предположим, что существует IPersonService
и его правильная реализация. Реализация помечена @Service
и находится на пути сканирования компонента весенней загрузки. Я использую фреймворки JMockit
, TestNG
и Spring MVC Test
для тестирования этого контроллера. Я также использую GSON
для преобразования объекта Person
в JSON
. Вот мой метод тестирования:
@Test
public void testUpdateFileDetails() throws Exception {
Person person = new Person();
person.id = "P01";
person.name = "SOME_PERSON_NAME";
person.age = 99;
new Expectations() {{
mockedPersonService.findOneIfExists("P01");
result = new IllegalArgumentException();
}};
String personJson = new Gson().toJson(person);
mvc.perform(post("/api/person/update").content(personJson))
.andExpect(status().is4xxClientError());
}
Когда я запускаю этот тестовый пример, я продолжаю получать следующее исключение:
Missing 1 invocation to:
com.mytestapplication.services.api.IPersonService#getFileDetails("P01")
on mock instance: com.mytestapplication.services.api.$Impl_IPersonServcie@8c11eee
Caused by: Missing invocations
at com.mytestapplication.rest.api.PersonRestControllerTest$2.<init>(PersonRestControllerTest.java:<line_number>)
at com.mytestapplication.rest.api.PersonRestControllerTest.testUpdatePerson(PersonRestControllerTest.java:<line_number>)
Здесь имеется в виду строка, содержащая оператор: new Expectations() {{ ... }}
Не могли бы вы помочь мне определить причину этого исключения?