Es común tener clases con métodos con parámetros de cadena que debe ser validado agains nulo o vacío, como este ejemplo:¿Cómo debo probar los parámetros de cadena vacía y/o vacía en un método?
public class MyClass {
public void MyMethod(string param){
if(string.IsNullOrEmpty(param)){
throw new ArgumentNullException(...);
}
//...
}
}
Está claro que el comportamiento del método es el mismo para ambos (no válido) valores. Esta es una situación muy común, y cuando se trata de probar estos métodos, siempre dudo sobre cómo hacerlo. Siempre creo dos pruebas separadas para estos casos:
[TestClass]
public class Tests {
[TestMethod]
public void MyMethod_should_fail_if_param_is_null(){
//...
myclass.MyMethod(null);
//...
}
[TestMethod]
public void MyMethod_should_fail_if_param_is_empty(){
//...
myclass.MyMethod("");
//...
}
}
Pero veo demasiada redundancia. Esas pruebas son exactamente iguales, con la única diferencia de que el parámetro pasó al método. Eso me molesta mucho, ya que tengo que crear dos pruebas para cada parámetro de cadena. Un método con 3 parámetros tendría 6 pruebas solo para probar los parámetros.
Creo que esta es la manera correcta de probar esos parámetros, pero si sé que el 99% de los parámetros de cadena se validarán de la misma manera, ¿no sería mejor probarlos para null (o vacíos) y suponer que el comportamiento en el otro caso será el mismo?
Me gustaría saber qué opina sobre esto. Sé que lo que estoy pidiendo es más una opinión técnica que una técnica, pero creo que la comunidad de pruebas puede tener algo interesante que decir sobre esta situación.
¡Gracias!
Gracias por su respuesta rápida! Ya creé mi propia versión de ExpectException (puedes verla aquí http://gerardocontijoch.wordpress.com/2008/12/02/uso-de-expectedexceptionattribute-para-testear-excepciones/), y úsala en estos casos. No puedo vivir sin él: P Me gusta la solución que propones, pensé en ello, pero como dijiste, "eso no sigue el dogma normal de las pruebas unitarias" y solo quería seguirlo, ya sabes , acostúmbrate a las buenas prácticas. Probablemente vaya por esta solución después de todo. Veamos lo que otros piensan ... –
La cosa es que no creo que seguir el dogma y arrojar el pragmatismo por la ventana * sea * una buena práctica :) Vale la pena * conocer * el dogma, pero luego ignorarlo conscientemente cuando He sopesado los pros y los contras de una situación particular y encontré que no funcionaba. –
Estoy totalmente de acuerdo con usted y ese fue el motivo de mi pregunta. Encontré los inconvenientes de seguir una cierta "buena" práctica, pero no muchos profesionales (una especie de contradicción, una buena práctica con más inconvenientes que profesionales), así que publiqué una pregunta para ver si había algo que me faltaba. –