Para responder sua pergunta específica: Não, não há bibliotecas que permitam que você imite chamadas de E / S de arquivos (que eu saiba). Isso significa que o teste "unitário" adequado de seus tipos exigirá que você leve essa restrição em consideração ao definir seus tipos.
Nota lateral rápida sobre como eu defino um teste de unidade "adequado". Acredito que os testes de unidade devem confirmar que você obtém a saída esperada (seja uma exceção, invoque um método etc.), desde que as entradas conhecidas sejam fornecidas. Isso permite que você configure suas condições de teste de unidade como um conjunto de entradas e / ou estados de entrada. A melhor maneira que encontrei para fazer isso é usar serviços baseados em interface e injeção de dependência, para que cada responsabilidade externa a um tipo seja fornecida por meio de uma interface transmitida por um construtor ou propriedade.
Então, com isso em mente, volte à sua pergunta. Eu zombei das chamadas do sistema de arquivos criando uma IFileSystemService
interface junto com uma FileSystemService
implementação que é simplesmente uma fachada dos métodos do sistema de arquivos mscorlib. Meu código usa os IFileSystemService
tipos em vez dos mscorlib. Isso me permite conectar meu padrão FileSystemService
quando o aplicativo está sendo executado ou zombar dos IFileSystemService
testes de unidade. O código do aplicativo é o mesmo, independentemente de como é executado, mas a infraestrutura subjacente permite que esse código seja facilmente testado.
Reconheço que é uma tarefa difícil usar o wrapper em torno dos objetos do sistema de arquivos mscorlib, mas, nesses cenários específicos, vale a pena o trabalho extra, pois o teste se torna muito mais fácil e confiável.