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