У меня есть класс обслуживания, как показано ниже.
public class DependantServiceImpl implements DependantService {
private DependantRepository dependantRepository;
private EmployeeRepository employeeRepository;
private final CompanyEntity companyEntity;
private final String DEPENDANT_ROLE = "dependant";
@Autowired
public DependantServiceImpl(
CompanyEntity companyEntity, DependantRepository dependantRepository,
EmployeeRepository employeeRepository) {
this.companyEntity = companyEntity;
this.dependantRepository = dependantRepository;
this.employeeRepository = employeeRepository;
}
Я использую фабричный метод, как показано ниже, чтобы получить сервисный слой.
@Service
public class DependantServiceFactoryImpl implements DependantServiceFactory {
private final DependantRepository dependantRepository;
private final EmployeeRepository employeeRepository;
private final CompanyRepository companyRepository;
@Autowired
public DependantServiceFactoryImpl(
CompanyRepository companyRepository, DependantRepository dependantRepository,
EmployeeRepository employeeRepository) {
this.dependantRepository = dependantRepository;
this.employeeRepository = employeeRepository;
this.companyRepository = companyRepository;
}
@Override
public DependantService dependantServiceForCompany(String companyId) {
return companyRepository.findById(companyId)
.map(companyEntity -> new DependantServiceImpl(
companyEntity, dependantRepository, employeeRepository))
.orElseThrow(() ->
new IllegalArgumentException(String.format("Invalid Compnay Id [{%s}]", companyId)));
}
}
Я хочу написать модульные тесты для класса Service ( DependantServiceImpl ), но для этого мне нужно получить класс обслуживания через DependantServiceFactoryImpl CRUD Repository (поскольку все репозитории расширены из Hibernate CRUD хранилище.) Внедрение в конструктор. Но проблема в том, что я не могу внедрить репозитории в DependantServiceFactoryImpl. Я пробовал много способов, как показано ниже.
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = DependantServiceFactoryImpl.class)
public class DependantServiceImplTest {
@MockBean
DependantRepository dependantRepository;
@MockBean
EmployeeRepository employeeRepository;
@MockBean
CompanyRepository companyRepository;
@Autowired
DependantServiceFactory dependantServiceFactory;
@Test
@DisplayName("Get dependant succesfully test")
void getDependentsTest() {
String companyId = "1";
String employeeId = "9a76bb33-772c-4c41-b2eb-eb40500d7026";
List<DependantEntity> dependantEntityList = dependantServiceFactory
.dependantServiceForCompany(companyId)
.getDependents(employeeId);
assertTrue(dependantEntityList.size() > 0);
}
Но я получаю ошибку ниже (для полной ошибки проверьте ссылку https://gist.github.com/Menuka5/de6cd71b6e39e0895cf9be4e7ba34b3d)
java.lang.IllegalArgumentException: неверный идентификатор Compnay [{1}]
Может кто-нибудь указать способ создания рабочих юнит-тестов, пожалуйста.
Заранее спасибо. :)