У меня есть работающий сервис kotlin, но когда я пытаюсь написать для него тест, я застреваю, потому что не могу инициализировать все свои сервисы, несмотря ни на что ...
@RunWith(SpringRunner::class)
class DataServiceTest {
@InjectMocks
private lateinit var DataService : DataService
@Mock
private lateinit var updateDataService: UpdateDataService
@Test
fun shouldUpdateCustomerEmail() {
DataService.setNewCustomerEmail("221722", ApiEmail("test@test.org"))
}
}
, который вызывает класс DataService:
@Autowired
private lateinit var updateDataService: UpdateDataService
.....
fun setNewCustomerEmail(id: String, email: ApiEmail) {
updateDataService.setNewCustomerEmail(id, email)
}
который вызывает класс UpdateDataService:
@Service
open class UpdateDataService {
@Autowired
private lateinit var addressRepository: AddressRepository
fun setNewCustomerEmail(id: String, email: ApiEmail) {
val AddressList = getCustomerAddressList(id)
mapNewEmailToAddressList(AddressList, email)
cusAddressRepository.saveAll(AddressList)
}
fun getCustomerCusbaAddressList(id: String) : List<Address> {
return addressRepository.findAddressByCustomerId( id )
}
fun mapNewEmailToAddressList(cusbaAddressList : List<Address>, email: ApiEmail) {
AddressList.map { DataUtil.trimAddressFields( it ) }
AddressList.map { it.email = email.email }
}
}
Я пробовал множество различных @RunWith()
свойств и множество различных способов Autowire / Mock / InjectMocks, но безрезультатно.
Проблема:
На данный момент с этим кодом. AddressRepository будет неинициализирован, когда тест попадет в UpdateDataService.class в строке. return addressRepository.findAddressByCustomerId( id )
Вопрос:
Как связать все эти сервисы таким образом, чтобы сервисы загружались во время работы приложения, но также при тестировании было бы известно, как связать эти сервисы и репозиторий?