У меня есть приложение Springboot Rest, в котором одна служба должна вызывать другой метод службы. Причина в том, что когда в системе создается сотрудник, он должен создать для этого сотрудника роль и группу по умолчанию. Поток - это вызов REST для контроллера Employee-> createEmp service -> этот inturn вызывает службу createrole и службу creategroup. Функционал работает нормально. Проблема с Junits. Когда я пытаюсь имитировать вызовы creategroup и createrole в сервисе createEmp, вызываются фактические методы.
IEmpGroupService empGroupService;
IEmpRoleService empRoleService;
createEmp {
//logic goes here
emprepo.save();
empgroupservice.createDefaultgroup();
empRoleservice.createDefaultRole();
}
Здесь есть указатели, пожалуйста?
Можно ли разместить ваш код JUNIT?
Поскольку вы пишете модульные тесты для службы createEmp, вам не нужно заботиться о том, что empgroupservice и empRoleservice делают внутри них, т.е. вы должны имитировать их в своих тестах junit.
Вы можете внедрить их на уровне класса (используя @Mock) в свой класс junit примерно так:
....
@Mock
empgroupservice mockedEmpgroupservice;
@Mock
empRoleservice mockedEmpRoleservice;
...
public void testCreateEmp(){
...
Mockito.doNothing().when(mockedEmpgroupservice).createDefaultgroup();
Mockito.doNothing().when(empRoleservice).createDefaultRole();
...
// invoke your method under test
...
Mockito.verify(mockedEmpgroupservice).createDefaultgroup(customer);
Mockito.verify(empRoleservice).createDefaultRole();
}
...
Не забывайте verify об их вызовах как о некоторых из ожиданий вашего теста.
PS. Я также предлагаю вам следовать соглашениям об именах для имен ваших классов. Например, empGroupService должен быть EmployeeGroupService.
Спасибо .. Насмешка над классом - это ключ к успеху. Однако мне пришлось использовать @Mockbean из-за зависимостей весенней загрузки ..
Было бы полезно, если бы вы разместили jUnits.