Não. Não faça E / S de teste de unidade. É uma perda de tempo.
Lógica de teste de unidade. Se houver muita lógica que você deseja testar no código de E / S, refate seu código para separar a lógica de como você faz E / S e o que você faz dos negócios reais de fazer E / S (o que é quase impossível de testar).
Para elaborar um pouco, se você quiser testar um servidor HTTP, faça-o através de dois tipos de testes: testes de integração e testes de unidade. Os testes de unidade não devem interagir com a E / S. Isso é lento e apresenta muitas condições de erro que nada têm a ver com a correção do seu código. Os testes de unidade não devem estar sujeitos ao estado da sua rede!
Seu código deve separar:
- A lógica de determinar quais informações enviar
- A lógica de determinar quais bytes enviar para enviar um bit específico de informação (como codifico uma resposta etc. em bytes brutos) e
- O mecanismo de gravar esses bytes em um soquete.
Os dois primeiros envolvem lógica e decisões e precisam de testes de unidade. O último não envolve tomar muitas decisões, se houver, e pode ser testado maravilhosamente usando o teste de integração.
Na verdade, esse é apenas um bom design, na verdade, mas uma das razões é que facilita o teste.
aqui estão alguns exemplos:
- Se você estiver escrevendo um código que obtém dados de um banco de dados relacional, pode fazer um teste de unidade como mapeia os dados retornados de consultas relacionais para o seu modelo de aplicativo.
- Se você estiver escrevendo um código que grava dados em um banco de dados relacional, é possível testar por unidade quais dados você deseja gravar no banco de dados sem realmente testar as consultas SQL específicas usadas. Por exemplo, você pode manter duas cópias do estado do aplicativo na memória: uma cópia representando a aparência do banco de dados e a cópia de trabalho. Quando você deseja sincronizar com o banco de dados, é necessário diferenciá-los e gravar as diferenças no banco de dados. Você pode facilmente testar esse código diff.
- Se você estiver escrevendo um código que lê algo de um arquivo de configuração, deseja testar o analisador de formato do arquivo de configuração, mas com cadeias de caracteres do arquivo de origem de teste, em vez de cadeias de caracteres obtidas do disco.