Hola Esteban,
En el libro no dice que los getters y setters deban probarse siempre, sino solamente cuando evidencian un comportamiento.
Por ejemplo, si yo tuviera una clase Persona con un atributo nombre y métodos getNombre
y setNombre:
que accedieran directamente al atributo nombre, entonces no sería necesario que haya una prueba para ellos dado que no habría comportamiento asociado.
Si tuviéramos, en cambio, una clase Punto con métodos setX:setY:
, getRho
, y getTheta
, podríamos hacer las siguientes pruebas unitarias para ambos getters:
test01ObtenerRhoDeUnPuntoInstanciadoEnCoordenadasCartesianas " Arrange " | punto rho | punto := Punto conX: 3 setY: 4. " Act " rho := punto getRho. " Assert " self assert: rho equals: 5.
test02ObtenerThetaDeUnPuntoInstanciadoEnCoordenadasCartesianas " Arrange " | punto rho | punto := Punto conX: 3 setY: 4. " Act " rho := punto getTheta. " Assert " self assert: rho closeTo: 53.13.
De esta manera estamos probando el pasaje de coordenadas cartesianas a polares. Desde afuera desconocemos cuáles son los atributos del punto. No sabemos si se guarda su estado en coordenadas polares o cartesianas, de manera tal que no sabemos si el cálculo lo está haciendo en el getter o en el setter.
Análogamente podemos hacer lo mismo al revés, es decir, instanciarlo en coordenadas polares y obtener sus coordenadas cartesianas:
test03ObtenerXDeUnPuntoInstanciadoEnCoordenadasPolares " Arrange " | punto x | punto := Punto conRho: 5 yTheta: 53.13. " Act " x := punto getX. " Assert " self assert: x closeTo: 3.
test04ObtenerYDeUnPuntoInstanciadoEnCoordenadasPolares " Arrange " | punto y | punto := Punto conRho: 5 yTheta: 53.13. " Act " y := punto getY. " Assert " self assert: y closeTo: 4.
Todas estas pruebas se consideran unitarias porque se encargan de verificar una única responsabilidad.
Por último, es indistinto usar assert:
y should:
. La diferencia es que el primero espera una condición booleana (algo entre paréntesis) y la segunda un bloque de código (algo entre corchetes).
Para probar el correcto lanzamiento de excepciones sí o sí vas a necesitar usar should:raise:
como mostramos en este video.
Saludos,
Tomás