Załóżmy, że zaczynam rozwijać grę RPG z postaciami atakującymi inne postacie i tym podobne rzeczy.
Stosując TDD, wykonuję kilka przypadków testowych w celu przetestowania logiki wewnątrz Character.receiveAttack(Int)
metody. Coś takiego:
@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));
}
Powiedz, że mam 10 metod testowania receiveAttack
metod. Teraz dodaję metodę Character.attack(Character)
(która wywołuje receiveAttack
metodę) i po przetestowaniu jej przez niektóre cykle TDD podejmuję decyzję: Character.receiveAttack(Int)
powinno być private
.
Co dzieje się z poprzednimi 10 testami? Czy powinienem je usunąć? Czy powinienem zachować metodę public
(nie sądzę)?
To pytanie nie dotyczy tego, jak przetestować prywatne metody, ale jak sobie z nimi poradzić po przeprojektowaniu podczas stosowania TDD
internal
lub odpowiednik twojego języka, aby nadal nie była narażona. W rzeczywistości odpowiedź Kevina Cline'a jest tego rodzaju podejściem.