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. Наверняка часто встречаются приватные методы внутри тестируемых методов. Как это обойти? Как сделать, чтоб метод посчитал, что такая сущность есть? Какая общая практика в таких случаях?


Ответы (0 шт):