estoy tratando de probar una unidad de método en una clase que inicializa algunos campos privados:¿Cómo probar el método vacío que solo modifica las variables de miembros de la clase privada?
public void init(Properties props) throws Exception {
this.language = props.getProperty(Constants.LANGUAGE,Constants.LANGUAGE_DEFAULT);
this.country = props.getProperty(Constants.COUNTRY,Constants.COUNTRY_DEFAULT);
try {
this.credits = Integer.valueOf(props.getProperty(Constants.CREDITS_OPTION_NAME, Constants.CREDITS_DEFAULT_VALUE));
} catch (NumberFormatException e) {
throw new Exception("Invalid configuration: 'credits' does not contain a valid integer value.", e);
}
//rest of method removed for sake of simplicity
}
Mi dilema es que quiero afirmar que el idioma, el país y créditos campos se han establecido después de llamar a init, sin embargo, son privados sin métodos de acceso público. Veo que hay dos soluciones para probar esta:
- hacer que los métodos públicos para acceder a los campos privados, a continuación, llamar a estos métodos después de probar el método init.
- Haga que la prueba de la unidad simplemente llame al método init, y suponga que todo funcionó correctamente, no se lanzó ninguna excepción.
¿Cuál cree que es la forma ideal de probar este método?
¿Hay alguna razón por la que nadie sugirió agregar otra prueba que llama al colocador, luego llama a "otro método en la misma clase que necesita que se establezcan estos campos?" Soy bastante nuevo en TDD y me he inclinado por este tipo de solución en mi propio trabajo, ¿hay algún problema con esto? ¿Sigue siendo una prueba unitaria u otra cosa, como pruebas de integración o algo así? como parece ser sugerido aquí: http://stackoverflow.com/questions/3193257/should-i-test-public-class-function-that-changes-only-internal-state-of-the-obje –