spring boot kotlin тест сервисного метода, в котором есть приватный метод проверки
Имею простое CRUD приложение на spring boot с kotlin. есть простой сервисный метод updateTeam():
override fun updateTeam(id: Int, nameDto: NameDto): TeamResponseDto {
try {
findTeamByIdOrThrowException(id)
val teamEntity = teamMapper.mapTeam(nameDto)
teamEntity.teamId = id
val savedEntity = teamRepository.save(teamEntity)
val teamResponseDto = teamMapper.mapTeam(savedEntity)
return teamResponseDto
.also { logger.info("Team entity with ID $id updated successfully") }
} catch (e: Exception) {
when (e) {
is TeamNotExistsException -> throw TeamNotExistsException("Team update failed: ${e.message}")
else -> throw TeamServiceException("Failed to update team entity with id $id: ${e.message}")
}
}
}
для упрощения чтения, я вытащил из него логику по проверке наличия уже существующей команды с определенным Id.
private fun findTeamByIdOrThrowException(id: Int): TeamEntity {
val teamEntity = teamRepository.findByIdOrNull(id)
?: throw TeamNotExistsException("There is no team with provided id $id")
return teamEntity
.also { logger.info("Team entity with ID ${teamEntity.teamId} found successfully") }
}
При написании success теста, получаю ошибку ***.exception.TeamNotExistsException: Team update failed: There is no team with provided id 1
Вот сам тест:
@ExtendWith(SpringExtension::class)
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
class TeamServiceImplTests {
@Mock
lateinit var teamRepository: TeamRepository
@Mock
lateinit var teamMapper: TeamMapper
@InjectMocks
lateinit var teamService: TeamServiceImpl
@Test
fun updateTeam_success() {
val id = 1
val nameDto = NameDto("testRu", "testEn", "testKk")
val teamResponseDto = TeamResponseDto(1, "testRu", "testEn", "testKk")
`when`(teamService.updateTeam(id, nameDto)).thenReturn(teamResponseDto)
val result = teamService.updateTeam(id, nameDto)
assertEquals(teamResponseDto, result)
}
}
Как я понял, при прогоне теста срабатывает проверка метода findTeamByIdOrThrowException
и он выкидывает исключение TeamNotExistsException
.
Наверняка часто встречаются приватные методы внутри тестируемых методов.
Как это обойти? Как сделать, чтоб метод посчитал, что такая сущность есть? Какая общая практика в таких случаях?