Para responder a su pregunta específica: No, no hay bibliotecas que le permitan simular llamadas de E / S de archivos (que yo sepa). Esto significa que la unidad "correctamente" que prueba sus tipos requerirá que tenga en cuenta esta restricción cuando defina sus tipos.
Nota rápida sobre cómo defino una prueba de unidad "adecuada". Creo que las pruebas unitarias deberían confirmar que obtienes el resultado esperado (ya sea una excepción, llamar a un método, etc.) proporcionó entradas conocidas. Esto le permite configurar las condiciones de prueba de su unidad como un conjunto de entradas y / o estados de entrada. La mejor manera que he encontrado para hacer esto es usar servicios basados en interfaz e inyección de dependencia para que cada responsabilidad externa a un tipo se proporcione a través de una interfaz que se pasa a través de un constructor o propiedad.
Entonces, con esto en mente, regresemos a su pregunta. Me he burlado de las llamadas al sistema de archivos creando una IFileSystemService
interfaz junto con una FileSystemService
implementación que es simplemente una fachada sobre los métodos del sistema de archivos mscorlib. Mi código luego usa los IFileSystemService
tipos mscorlib en lugar de los tipos. Esto me permite conectar mi estándar FileSystemService
cuando la aplicación se está ejecutando o simular IFileSystemService
en las pruebas de mi unidad. El código de la aplicación es el mismo independientemente de cómo se ejecute, pero la infraestructura subyacente permite que ese código se pruebe fácilmente.
Reconoceré que es difícil usar el contenedor alrededor de los objetos del sistema de archivos mscorlib pero, en estos escenarios específicos, vale la pena el trabajo extra ya que las pruebas se vuelven mucho más fáciles y confiables.