Скажімо, я починаю розробляти рольову гру з персонажами, які нападають на інших персонажів, і подібного роду речі.
Застосовуючи 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
або еквівалент вашої мови, щоб все-таки запобігти його викриттю. Насправді відповідь Кевіна Клайна полягає в такому підході.