Pila de tecnología: .NET 4, C#, NUnitTDD: ¿Es plausible tener pruebas de integración, pero no pruebas de unidades?
Estoy intentando aplicar el desarrollo impulsado por prueba a un nuevo proyecto que realiza el procesamiento de imágenes. Tengo una clase base que contiene métodos y subclases de E/S de archivos compartidos que realizan varios algoritmos de procesamiento específicos. Según tengo entendido, las pruebas unitarias no tocan el sistema de archivos u otros objetos, y se burlan del comportamiento donde eso ocurre. Mi clase base solo contiene accesos simples y llamadas directas de E/S del sistema de archivos.
public class BaseFile
{
public String Path { get; set; }
public BaseFile()
{
Path = String.Empty;
}
public BaseFile(String path)
{
if (!File.Exists(path))
{
throw new FileNotFoundException("File not found.", path);
}
Path = path;
}
}
¿Hay algún valor en probar estos métodos? Si es así, ¿cómo podría abstraer las llamadas al sistema de archivos?
Mi otra pregunta es cómo probar la subclase que es específica para un tipo de archivo de imagen (~ 200 MB). He buscado en el sitio y encontré similarquestions, pero ninguno tiene que ver con los tamaños de archivo con los que estoy trabajando en este proyecto. ¿Es plausible que una clase tenga pruebas de integración (usando un "archivo dorado"), pero no hay pruebas de unidad? ¿Cómo podría seguir estrictamente los métodos TDD y escribir primero una prueba fallida en este caso?
Si TDD es difícil de aplicar, o inadecuado, no lo aplique. No es una bala de plata. – CharlesB
@CharlesB, estoy de acuerdo. Lamentablemente, ese sentimiento se usa a menudo como excusa para no usar TDD cuando es correcto y ventajoso hacerlo. A veces hay una gran curva o mucho trabajo preliminar pero esto generalmente vale la pena. –
@CharlesB No estoy seguro de que estoy de acuerdo con eso. El problema es que esta clase que hace un poco de trabajo no se prueba y, por lo tanto, su confianza para cambiarla disminuye. El problema es que no es fácil burlarse de los métodos estáticos en System.IO, pero eso no significa que renuncies a las pruebas, solo significa que necesitas hacer un poco más de trabajo para que sean comprobables. Esta es la razón por la cual MS presenta System.Web.HttpContextBase, para abordar los problemas al no poder simular fácilmente un HttpContext. No necesitamos probar httpContext, solo que nuestro código interactúa correctamente con él. – Andy