Допустим, я начинаю разрабатывать ролевую игру с персонажами, которые атакуют других персонажей и тому подобное.
Применяя TDD, я делаю несколько тестов для проверки логики внутри Character.receiveAttack(Int)метода. Что-то вроде этого:
@Test
fun healthIsReducedWhenCharacterIsAttacked() {
val c = Character(100) //arg is the health
c.receiveAttack(50) //arg is the suffered attack damage
assertThat(c.health, is(50));
}
Скажем, у меня есть 10 методов тестирования receiveAttackметода. Теперь я добавляю метод Character.attack(Character)(который вызывает receiveAttackметод), и после нескольких циклов тестирования TDD я принимаю решение: Character.receiveAttack(Int)должно быть private.
Что происходит с предыдущими 10 тестами? Должен ли я удалить их? Должен ли я сохранить метод public(я так не думаю)?
Этот вопрос не о том, как тестировать частные методы, а о том, как обращаться с ними после перепроектирования при применении TDD
internalили эквивалент вашего языка для предотвращения его раскрытия. На самом деле ответ Кевина Клайна - это такой подход.