Тесты Kotlin с хранилищем (весна-ботинок, Kotlin, Джерси, Jax-RS) - PullRequest
0 голосов
/ 20 мая 2019

У меня есть работающий сервис 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 )

Вопрос:

Как связать все эти сервисы таким образом, чтобы сервисы загружались во время работы приложения, но также при тестировании было бы известно, как связать эти сервисы и репозиторий?

1 Ответ

0 голосов
/ 20 мая 2019

Используя Spring Boot Test, вы можете легко управлять контекстом

@RunWith(SpringRunner::class)
@SpringBootTest
class DataServiceTest

или предоставить @TestConfiguration

...