Qual è il modo corretto di testare il codice che esegue l'IO?

0

C'è un buon modo per testare il codice che esegue l'IO? In particolare, in Java, se si utilizza la route Mock, è necessario includere la maggior parte delle API native nelle proprie classi mockable, ad esempio:

public class Filesystem {
  public void write(String filename, String text) throws FileNotFoundException {
    try (PrintWriter out = new PrintWriter(filename)) {
      out.println(text);
    }
  }
}

e quindi passare un'istanza di Filesystem a qualsiasi classe che deve scrivere testo per un file. C'è un modo migliore?

    
posta JonathanR 29.09.2017 - 23:11
fonte

1 risposta

3

Proprio come dice Frank nel commento, non credo che sia necessario eliminare il file system.

Gli stub esistono perché il servizio che chiami è:

  • Troppo complicato, il test verrebbe per lo più testato rispetto a
  • Può cambiare spesso, rendendo instabili i test
  • Chiamarlo potrebbe fallire, rendendo fragile il tuo test
  • Troppo lento per chiamare, rendendo l'intera suite di test lenta
  • Il servizio potrebbe persistere nei dati che gli inviamo e rendere difficile rimuoverlo

Il file system non è nessuno di quelli. Provare a spegnerlo significherebbe implementare esattamente le stesse funzionalità, solo in memoria. È estremamente stabile, quindi non devi preoccuparti di cambiare. La chiamata al file system raramente fallisce. Le operazioni del file system sono relativamente veloci. E mentre il file system è persistente, è facile cancellarlo prima di ogni test.

Quindi, se si mantiene una corretta separazione tra i test, è perfettamente corretto utilizzare il file system. Ciò può essere ottenuto, ad esempio, aggiungendo il nome del test a ciascun file / cartella utilizzato dal test.

    
risposta data 30.09.2017 - 07:14
fonte

Leggi altre domande sui tag